1

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

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

谢谢,

4

1 回答 1

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 所期望的匹配即可。

于 2013-10-17T15:51:33.353 回答