function object:以class形式包装的函数(在类中重载操作符()),除此以外,它还可以像一般class一样拥有 成员变量 和 成员函数,你可以以此利用function object 来表现 具有局部状态的函数,例如:
template <class Person>
struct last_name_is{
string value;
last_name_is(const string& val): value(val) {}
bool operator () (const Person& p) const
{
return p.last_name == value;
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
函数对象(仿函数),作为【作用于线性区间上的算法】的附属品,使得算法 更泛型化,一般化。例如:使得线性查找一般化。
template <class InputIterator, class Predicate>
InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )
{
while( first != last && !pred(*first) ) //在此处pred(*first)调用even<int>类的重载操作符()函数
++first;
return first;
}
/**********************************函数对象************************************************/
template <class Number>
struct even{
bool operator () (Number x)
{
return ( x & 1 ) == 0;
}
};
/******************************************************************************************/
find_if( first, last, even<int>() ); // 在此处,传递函数对象 even<int>()作为算法find_if的第三个参数//even<int>()调用了类even<int>的默认构造函数,来构造函数对象。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
函数对象的分类: 无参(generator),单参(unary function),双参(binary function)等。其中 单参并返回bool类型的function object 称为predicate, 同理,双参并返回bool类型的function object 称为binary predicate。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function object adapter :函数对象适配器
首先:明白 适配器 相当于一种 类型转化器,将 某一种类型接口 转换成 另一种类型接口。
所以,函数对象适配器 的作用相当于是:将 某一种函数对象 转换成 另一种函数对象。
可以把 函数对象适配器 想象成更高层的 函数,该函数 以 函数对象 为参数,并返回 函数对象。
函数对象适配器 主要有两种:1. 绑定器 bind1st、bind2nd 2. 取反器 not1、not2
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STL中预定义了基本的函数对象:如基本数值运算:plus 、 minus 、 multiplies 、 divides等。
如基本比较运算:equal_to 、not_equal_to、greater、less等。
泛型编程与STL学习-function object,布布扣,bubuko.com
原文:http://blog.csdn.net/qiaojianqj/article/details/22188997