我有一个带有伪代码的示例函数
bool DeleteValues(std::vector<int>& vec)
{
bool isElementDeleted = false;
if(some condition is true)
{
delete element from vec;
isElementDeleted = true;
}
else if(some other condition is true)
{
delete element from vec;
isElementDeleted = true;
}
return isElementDeleted;
}
这将从输入 vector 中删除一些元素。关于为什么应该删除元素的原因有多种情况,它会在此函数中检查它们并删除元素。 如果删除了某些内容,则返回 true,否则返回 false。
这是通过其他函数中的指针调用来调用的。 这是所有遗留代码。
新的要求是,除此之外我还应该能够得到它被删除的原因。
由于我无法更改函数签名(这会导致代码的其他非相关部分发生大量更改),我有什么选择?
最佳答案
您实际上可以更改函数签名,方法是添加一个具有默认值 的参数。所有遗留代码仍然有效,因为额外参数将具有默认值,而需要返回原因的新代码会将某些内容传递给第二个(可选)参数。
额外的可选参数应该是什么?也许是 std::string
(或者更确切地说,是对一个的引用)?
您还可以通过编写第二个函数来解决这个问题,该函数实际上完成当前函数中现在完成的工作。这个新函数有两个参数,第一个函数(您当前的函数)只是调用新函数。
这个可以喜欢
bool DeleteValuesWithReason(std::vector<int>& vec, std::string& reason)
{
// Code here, same as before but sets reason
}
bool DeleteValues(std::vector<int>& vec)
{
std::string dummy;
return DeleteValuesWithReason(vec, dummy);
}
关于c++ - 函数指针 - 无法更改函数签名,我有什么选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203057/