函数名作为参数,但有不同数量的说法
问题描述:
我已经写了二分求解器与函数名作为参数,该函数只有一个参数:函数名作为参数,但有不同数量的说法
double Bisection(double(*func)(double), double xLower, double xUpper, double xEPS = 1e-9, double yEPS = 1e-9);
现在我想在测试版应用此求解逆累积概率函数,其中CDF已知。但是,这CDF有三个参数,其中最后两个参数是已知的:
double CDF(double x, double alpha, double beta)
我应该如何使用这个CDF通过减少参数个数的求解器的参数?
答
的第一步是用C++的std ::功能,以取代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
这真的是一个很好的解决方案! –