所谓的“函数配接器”是指可以把仿函数和另一个仿函数(或某个值,或某个一般函数)结合起来的仿函数。
函数配接器也定义在头文件< functional>中。
#include <functional>
例如:
finf_if(coll.begin() , coll.end() , //range
bind2nd(reater<int> , 40 )) //criterion
其中的表达式:
bind2nd(reater<int> , 40 )
结合得到一个组合型的仿函数,检查某个值是否大于40,实际上,bind2nd是将一个二元仿函数转换为一个一元仿函数。他将第二参数传给有第一参数二元仿函数,作为二元仿函数的第二参数。
bind1st(op , value ) //op(value , param)
bind2nd(op , value ) //op(value, param)
not1(op) //! op(param)
not2(op) //! op(param1, param2)
函数配接器也是仿函数,故可以结合仿函数形成更强大(更复杂)的表达式。
例如,下面的语句返回一个容器里面的第一个偶数值函数:
pos = find_if( coll.begin(), coll.end(), //range
not1(bind2nd(modulus<int>,2) ) ); //criterion