一般指向多值函数的指针

时间:2013-10-17 15:43:08

标签: c++ function-pointers

我试图在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);

现在我通过桥接单变量函数执行此操作,并将其余参数指定为全局变量,但这是一个非常不优雅的解决方案。谁能给我一个更好的?

谢谢,

1 个答案:

答案 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

param2param3可以是任何类型,只要它们与f期望的匹配即可。