【问题标题】:how to use binder and bind2nd functors?如何使用 binder 和 bind2nd 函子?
【发布时间】:2009-09-21 16:07:50
【问题描述】:

如何使用 binder2nd、bind2nd 和 bind1st? 更具体地说,何时使用它们以及它们是否必要? 另外,我正在寻找一些例子。

【问题讨论】:

    标签: c++ functor bind2nd


    【解决方案1】:

    严格来说,它们从来都不是必要的,因为您总是可以定义自己的自定义仿函数对象;但是它们非常方便,正是为了避免在简单的情况下必须定义自定义函子。例如,假设您要计算std::vector<int> 中的> 10 项目。你当然可以编码...:

    std::count_if(v.begin(), v.end(), gt10()) 
    

    定义后:

    class gt10: std::unary_function<int, bool>
    {
    public:
        result_type operator()(argument_type i)
        {
            return (result_type)(i > 10);
        }
    };
    

    但请考虑编码更方便,而不是:

    std::count_if(v.begin(), v.end(), std::bind1st(std::less<int>(), 10)) 
    

    无需定义任何辅助仿函数类!-)

    【讨论】:

    • 好的,我明白了,但是这个呢? bool IsOdd (int i) { return ((i%2)==1); } int main () { int mycount;矢量 myvector; for (int i=1; icplusplus.com/reference/algorithm/count_if他们没有定义任何函子对象,只是一个简单的函数
    • 对不起,我没有格式化代码,但是代码在这里:cplusplus.com/reference/algorithm/count_if
    • @Tom,是的,在非常简单的情况下,仿函数可以是一个函数,但同样,您必须事先定义它(通常远离使用点)——绑定器是方便,因为它们可以让您避免这种情况(从来没有必要,正如我已经说过的:只是方便!-)。
    【解决方案2】:

    Binders 是 C++ 处理currying 的方式。顺便说一句,请查看Boost Bind

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2014-05-22
      相关资源
      最近更新 更多