指向多值函数的常规指针

General pointer to multi-valued function

本文关键字:常规 指针 函数      更新时间:2023-10-16

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

现在我正在通过桥接单变量函数来做到这一点,我将其余参数指定为全局参数,但这是一个非常不优雅的解决方案。有人能给我一个更好的吗?

谢谢

一月

您可以使用可变参数模板:

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 的期望相匹配。