在为STD模板函数创建函数对象时,还要还原样板
Reducing boilerplate when creating functor objects for std template functions
作为解决另一个问题的解决方案,创建"通用函数对象"似乎很有用,该对象将各种标准(也许是用户定义的(模板函数包装在函数对象中。
这些有时比相应的模板函数更有用,因为当作为函数对象传递时,该函数的特定类型是"绑定较晚"的:仅在Callee内的呼叫站点上,而不是在呼叫者中。例如,您不能将std::min
作为函子对象传递,您必须通过诸如std::min<int>
之类的实例化,这意味着Callee不能在各种同质类型上运行。
另一方面,您可以通过min_functor
如下所示,min
的正确实例化将在Callee的每个呼叫侧选择。
struct min_functor {
template <typename T>
const T& operator()(const T& l, const T& r) const { return std::min(l,r); }
};
最后,问题是:如果我想为max
等各种二进制操作定义其中的几个,等等,除了宏> 1 外,是否有某种方法可以在不复制上面的样板的情况下进行操作。?
1 宏似乎在这里工作得很好,但是我忍不住要面对强大的反马克罗大厅的嘲笑。
no ,因为没有即时上下文命名函数模板,以识别它的专业化。(考虑模板模板参数必须是类或别名模板。(但是,有几个警告:
- 这样做的几种语法已是提出的。
- 可以将函数模板作为参数传递的参数,该参数是函数指针(以无状态为代价,可能没有插入(。
- 某些现代设计直接使用函数对象,尽管这实际上只是提前包括相同的样板。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 在为STD模板函数创建函数对象时,还要还原样板
- 使用函数指针的模板推导还原
- omp还原和lambda函数