2017-08-26 55 views
0

我已经写了二分求解器与函数名作为参数,该函数只有一个参数:函数名作为参数,但有不同数量的说法

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通过减少参数个数的求解器的参数?

回答

1

的第一步是用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

+1

这真的是一个很好的解决方案! –