STL的function object concepts
1、几乎任何算法都能以 [ 将其行为的某一部分抽象为function object ]的方式来加以一般化;
2、Function objects与adaptable function objects的区别:后者需要定义引用类型argument_type等,一般继承自基类unary_function和binary_function;
3、任何function object concept 的基本条件只是:如果f是个function object,我们可以将operator( )施行于 f 身上。
4、算法中固定了Function objects的输入变量及其个数,其一般都是指相关迭代器指针;
而Function objects adapter的一个作用也是修改adaptable function objects的输出变量个数operator()( );
struct last_name_is
{
string value;
last_name_is(const string& val) : value(val) { } (构造函数初始化;)
bool operator()(const Person& x) const { (const Person& x 是对象的输入,被调用时,由调用的函数内部输入参数,一般是迭代器对象值)
return x.last_name == value;
}
};
find_if(first, last, last_name_is("Smith"))
class类Function object
0、
template<class Number> struct even
{
bool operator( ) (Number x) const { return (x & 1)==0;)}
};
这里的(Number x) 是类even的输出;
一般还定义一个初始化函数constructor;
1、find_if(f, l, even<int>( ));
even<int>是个class,所以我们必须将该种class object传给find_if。所以我们必须调用其constructor。
2、因为operator()被声明为inline,所以使用even时,不需任何函数调用;
3、find_if(f, l, even<int>( ) )
function call操作符operator()可以被重载,所以只要某个型别具有妥善定义的operator(),你便可以将该对象传给算法find_if当做引数。