gpt4 book ai didi

c++ - 在为标准模板函数创建仿函数对象时减少样板

转载 作者:行者123 更新时间:2023-11-30 03:16:47 25 4
gpt4 key购买 nike

作为 another question 的解决方案创建将各种标准(也许是用户定义的)模板函数包装在一个仿函数对象中的“通用仿函数对象”似乎很有用。

这些有时比相应的模板函数更有用,因为函数的特定类型在作为仿函数对象传递时“绑定(bind)后期”:仅在被调用方的调用站点,而不是在调用方。例如,您不能传递 std::min作为一个仿函数对象,你必须传递一个像std::min<int>这样的实例化这意味着被调用者不能对各种同质类型进行操作。

另一方面,您可以通过 min_functor如下所示和 min 的正确实例化将在被叫方的每个调用方选择。

struct min_functor {
template <typename T>
const T& operator()(const T& l, const T& r) const { return std::min(l,r); }
};

最后,问题:如果我想为各种二进制操作定义其中的几个,例如 max等等,除了宏1之外,有没有什么方法可以在不复制上面样板的情况下做到这一点?


1 宏似乎在这里很管用,但我不忍心面对强大的反宏游说团体的蔑视。

最佳答案

,因为您不能在没有标识函数模板特化的直接上下文的情况下命名函数模板。 (考虑到模板模板参数必须是类或别名模板。)然而,有几个警告:

  1. 实现此目的的几种语法 have been proposed .
  2. 函数模板可以作为函数指针参数的参数传递(代价是没有状态,可能也没有内联)。
  3. 一些现代设计使用 function objects直接,尽管这实际上只是提前包含了相同的样板文件。

关于c++ - 在为标准模板函数创建仿函数对象时减少样板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987832/

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