【问题标题】:Function name as argument but with different number of argument函数名称作为参数,但参数数量不同
【发布时间】:2018-02-04 02:16:39
【问题描述】:

我编写了一个以函数名作为参数的二分求解器,而该函数只有一个参数:

double Bisection(double(*func)(double), double xLower, double xUpper, double xEPS = 1e-9, double yEPS = 1e-9);

现在我想将此求解器应用于已知 CDF 的 Beta 逆累积概率函数。但是这个 CDF 有三个参数,其中最后两个参数是已知的:

double CDF(double x, double alpha, double beta)

我应该如何通过减少参数的数量来使用这个 CDF 作为求解器的参数?

【问题讨论】:

    标签: c++ arguments


    【解决方案1】:

    第一步是用 C++ std::function: 替换你的 C 风格函数指针:

    double Bisection(std::function<double(double)> func, double xLower, double xUpper, double xEPS = 1e-9, double yEPS = 1e-9);
    

    实施将与以前相同。现在你可以使用std::bind() 来调用它了:

    double alpha, beta, xLower, xUpper; // TODO: assign
    Bisection(std::bind(CDF, _1, alpha, beta), xLower, xUpper);
    

    std::bind() 的作用是通过将第二个和第三个参数绑定到变量,将您的三参数 CDF 函数转换为一参数 (_1) 函数。

    您不能将 std::bind() 与原始 C 样式函数指针一起使用,如下所述:convert std::bind to function pointer

    【讨论】:

    • 这真是一个很棒的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多