如何使用binder和bind2nd仿函数?

时间:2009-09-21 16:07:51

标签: c++ functor bind2nd

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

2 个答案:

答案 0 :(得分:5)

他们绝不是严格来说,必要,因为你总能定义自己的自定义函子对象;但它们非常方便,以便避免在简单情况下必须定义自定义函子。例如,假设您要计算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)) 

没有任何辅助仿函数类需要定义! - )

答案 1 :(得分:1)

Binders是C ++执行currying的方式。顺便说一句,看看Boost Bind