我使用優化工具箱中的函數,該函數以數值方式計算函數的導數。它接受一個指向具有一個參數的函數的指針,但是如果我需要將指針傳遞給一個帶有多個參數的函數,並期望只傳遞其他較不重要的參數呢?指向具有多個參數作爲函數參數的函數
//Function from toolbox
double num_differentation(double (func(const double)), double x)
{
//makes various calls to func, but with only one parameter
func(x);
}
現在假設我有一個功能,我想傳遞給以上,但其中有額外的參數並不直接相關的優化問題,但仍然是需要在該函數有意義的結果到達。
double my_func_to_be_input(double a, double b, double c) {
return a+b*c;
}
有沒有辦法重寫num_differentiation,以便在調用func時它會通過所有三個參數?我嘗試以下,但它沒有工作:
double num_differentation(double (func(const double arg1, const double arg2, const double arg3)), double x)
{
//makes various calls to func, but with only one parameter
func(x, arg2, arg3);
}
如果我們想更加花哨,將有可能爲num_differentiation接受功能與不相干的人只是被穿過不同的參數號?
在任何情況下,我不想訴諸全局變量來路由這些額外的參數。
我正在使用Visual Studio 2013,並歡迎任何有用的建議,尤其是具體的代碼示例。
更新: 這就是我解決它的方法。
//Rewritten function from toolbox
double rewritten_num_differentation(std::function<double(double)> func, double x)
{
func(x);
}
在我的主要代碼:
using namespace std::placeholders;
auto my_func_to_be_input_with_forwarded_arguments= std::bind(my_func_to_be_input, _1, second_argument_to_be_forwarded, third_argument_to_be_forwarded);
return rewritten_num_differentiation(my_func_to_be_input_with_forwarded_arguments, x_arg);
這類似於CrazyEdie建議的第一個解決方案。也許還有更優雅的方法不涉及重寫工具箱功能,但將std :: function類型轉換爲C風格函數指針似乎非常複雜(就像他們在這裏嘗試http://www.cplusplus.com/forum/general/63552/)。
要在編譯時執行此操作,可以使用可變參數模板。我不確定VS2013的支持會有多好。 – 2014-11-03 05:37:09
代替你可能不得不使用一個解決方案,比如讓'func'接受一個參數向量。 – 2014-11-03 05:37:58