【发布时间】:2009-09-21 16:07:50
【问题描述】:
如何使用 binder2nd、bind2nd 和 bind1st? 更具体地说,何时使用它们以及它们是否必要? 另外,我正在寻找一些例子。
【问题讨论】:
如何使用 binder2nd、bind2nd 和 bind1st? 更具体地说,何时使用它们以及它们是否必要? 另外,我正在寻找一些例子。
【问题讨论】:
严格来说,它们从来都不是必要的,因为您总是可以定义自己的自定义仿函数对象;但是它们非常方便,正是为了避免在简单的情况下必须定义自定义函子。例如,假设您要计算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))
无需定义任何辅助仿函数类!-)
【讨论】:
Binders 是 C++ 处理currying 的方式。顺便说一句,请查看Boost Bind 库
【讨论】: