如何使用binder2nd,bind2nd和bind1st? 更具体地说何时使用它们并且它们是否必要? 另外,我正在寻找一些例子。
答案 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库