gpt4 book ai didi

c++ - 指向多值函数的通用指针

转载 作者:行者123 更新时间:2023-11-30 04:13:22 24 4
gpt4 key购买 nike

我正在尝试用 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 的期望即可。

关于c++ - 指向多值函数的通用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com