2017-08-26 75 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

這真的是一個很好的解決方案! –