gpt4 book ai didi

c++ - 无论如何传递函数作为模板参数?

转载 作者:行者123 更新时间:2023-11-30 02:13:47 26 4
gpt4 key购买 nike

我一直在做一个项目,我需要知道是否有将函数传递给模板类?可以说我希望它执行正弦或余弦函数

#ifndef INTEGRAL_H
#define INTEGRAL_H

template<class F>
class Integral
{
public:
Integral( F func):f_(func){}
~Integral()=default;
Integral(){
int a,b,N;
double h=(b-a)/N;
sum=0.0;
for (size_t j=0; j<N;++j)
{
sum+=f_(a+j*h); // here i would like to perform sin(a+j*h) or cosinus or somethingelse
}

sum*=h;

}

double Sum(){return sum;}

private:
F f_;
double sum;

};

#endif // INTEGRAL_H

最佳答案

您的代码“按编码”工作(在构造函数中进行小的修复后,与问题无关)。但是std::sin没有命名单个函数,您不能将它直接传递给 Integral。最简单的方法是将它包装成一个 lambda:

Integral i([](auto arg) { return std::sin(arg); });
double value = i.Sum();

如果你的编译器不支持template argument deduction (自 C++17 起可用),你必须更冗长:

auto my_sin = [](auto arg) { return std::sin(arg); };
Integral<decltype(my_sin)> i(my_sin);
double value = i.Sum();

关于c++ - 无论如何传递函数作为模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58879957/

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