如何使用binder和bind2nd仿函数?

Tom*_*Tom 1 c++ functor bind2nd

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

Ale*_*lli 5

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

std::count_if(v.begin(), v.end(), gt10()) 
Run Code Online (Sandbox Code Playgroud)

定义后:

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

但请考虑编码更方便,相反:

std::count_if(v.begin(), v.end(), std::bind1st(std::less<int>(), 10)) 
Run Code Online (Sandbox Code Playgroud)

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