1

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

4

2 回答 2

5

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

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

于 2009-09-21T16:18:30.623 回答
1

Binder 是 C++ 进行currying的方式。顺便说一句,查看Boost Bind

于 2009-09-21T18:00:41.620 回答