概念
指定义了operator()的对象,如:
FunctionObjectType fo;
...
fo(...);
其中的fo();是调用了fo对象的operator(),而不是调用函数fo()
可以将函数对象视为一般函数,只不过是一种更复杂的撰写手段,比如:
class FunctionObject
{
public:
void operator() ()
{
statements
}
}
这样写的好处是:
1.更灵巧,它可以拥有状态。对于相同的函数对象类你可以拥有两个状态不同的实力。寻常的函数无法做到这一点.
2.每个函数对象都有其类型,你可以将函数对象类型当做模板参数传递,从而指定某种行为。
3.执行速度,函数模板比函数指针更快
以函数对象为排序准则
class Person
{
public:
string firstname() const;
string lastname() const;
...
};
class PersonSortCriterion
{
public:
bool operator() (const Person & p1, const Person& p2) const
{
return p1.lastname() < p2.lastname() || (p1.lastname() == p2.lastname() && p1.