我试图在c ++中创建一个有点通用的单变量集成例程。我写了一个自适应求积法,它接受一个指向单个变量函数的指针,如下所示:
typedef complex<double> cd;
cd GaussIntegrate(cd (*f) (cd),cd zmin,cd zmax);
但是,我想将其扩展为一般的多变量函数。集成仍然是单个变量,但我想允许该函数依赖于多个变量,如
cd GaussIntegrate(cd (*f) (cd, ...),cd zmin,cd zmax);
所以我可以使用func(cd)或func(cd,double,int)作为集成函数。
但是,我不知道创建这样一个模板的最佳方法是什么。应该有一种方法来指定其余的参数,所以而不是
GaussIntegrate(&function,zmin,zmax);
我也应该能够写出像
这样的东西GaussIntegrate(&function(param2,param3),zmin,zmax);
现在我通过桥接单变量函数执行此操作,并将其余参数指定为全局变量,但这是一个非常不优雅的解决方案。谁能给我一个更好的?
谢谢,
扬
答案 0 :(得分:2)
您可以使用可变参数模板:
typedef complex<double> cd;
template <typename... Args>
cd GaussIntegrate(cd (*f) (cd, Args...),cd zmin,cd zmax, Args... args)
{
//Call your function like this:
f(zmin, std::forward<Args>(args)...);
//Do other things as needed...
return 0;
}
然后你可以这样调用你的函数:
GaussIntegrate(f,zmin,zmax, param2, param3); //Where param2 and param3 will be forwarded to your function f
param2
和param3
可以是任何类型,只要它们与f期望的匹配即可。