c++ - 函数指针 - 无法更改函数签名,我有什么选择?

标签 c++ function-pointers

我有一个带有伪代码的示例函数

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/

相关文章:

c++ - std::iterator 将其用作类变量时出现段错误

c++ - 无法初始化数组错误 C2440 : '=' : cannot convert from 'initializer-list' to 'abd'

c++ - "system(...)"在 C++ 中有什么作用?

c++ - 传递函数

C++,函数指针异常错误

c++ - 误解函数指针——将其作为参数传递

c++ - 如何更改 QComboBox 项目的高度大小?

c++ - 限制用户输入

java - 包含用于参数传递的方法/函数的数组

arduino - 将 typedef 函数指针作为参数传递在 Arduino 1.6.5 中不起作用