在for_each()函数的第三个参数位置,将函数对象于给定参数等两个参数绑定为一个参数;那么似乎就是使用继承,参与构造了仿函数对象;那么常用的函数适配器有两个,bind2nd(),bind1st();
for_each(v.begin(),v.end(),bind2nd(Printer(),given));
bind2nd():将given绑定至operator()函数第二个参数位置;
函数原型:bind2nd<_Fn,T>(const _Fn& _Fnc,const T&_Right);
bind1st():将given绑定至operator()函数第一个参数位置;
bind2nd<_Fn,T>(const _Fn& _Fnc,const T&_Left);
我们可以看到bind2nd也是模板,这里将会创建相应的对象;
两者仅参数绑定位置不同,
参数绑定后,仿函数的类需要以public方式继承类模板binary_function<形参类型1,形参类型2,返回值类型>;
例:class Printer : public binary_function<int, double, void>{..}
operator()函数为二元(2个参数)时,继承二元函数的父类binary_function(_Arg1 arg1, _Arg2 arg2, _Result res);
operator()函数为一元(1个参数)时,继承一元函数的父类unary_function(_Arg arg, _Result res)。
————————————————
版权声明:本文为CSDN博主「NewsomTech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/newson92/article/details/114156359
C++ STL(十一):适配器(函数对象适配器、取反适配器、函数指针适配器、成员函数适配器)_NewsomTech的博客-CSDN博客
它使用了接口;并需要重写父类的operator()函数;