是否有pass函数作为模板参数
is there anyway pass function as template parameter?
我一直在做一个项目,我需要知道是否有将函数传递到template类?比方说我想用这个来做鼻窦或余弦功能
#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();
如果您的编译器不支持模板参数推导(从C++17开始可用(,那么您必须更加详细:
auto my_sin = [](auto arg) { return std::sin(arg); };
Integral<decltype(my_sin)> i(my_sin);
double value = i.Sum();
这可能会有所帮助:函数作为模板参数传递
最后,函数只不过是内存中某个特定位置的地址,它可以归结为一个简单的数字,这也是模板系统所支持的。
然而,在您的情况下,我建议您只传递一个std::function
对象,它是一个光荣的函数指针,作为函数的常规参数,而不需要模板(至少对于功能的这一部分(。
是否有传递函数作为模板参数?
是。示例:
template<return_type (template_argument_name)(argument_list)>
另一种方法是传递一个可调用类型作为模板参数,并调用该类型的对象。事实上,这就是您在示例中所做的。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 是否有pass函数作为模板参数
- 我如何将可变数量的参数传递给LLVM OPT PASS
- 是否可以在不创建临时变量的情况下"pass"未命名的参数?
- "return-by-reference"或"pass-by-reference"参数何时与constexpr兼容?
- 将函数模板"pass"为泛型可变参数 lambda 返回语句是好方法吗?
- 如何调用pass模板成员方法作为参数