1 概念
将()运算符重载为一个类的成员函数,这个类就称为函数对象类。这个类的对象就是函数对象。
函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。
举个例子:
class CAverage
{
public:
//重载()运算符
double operator()(int a1, int a2, int a3)
{
return (double)(a1 + a2 + a3) / 3;
}
};
int main()
{
CAverage average; //能够求三个整数平均数的函数对象
cout << average(3, 2, 3); //等价于 cout << average.operator(3, 2, 3);
return 0;
}
average.operator(3, 2, 3);的调用可以简化为average(3, 2, 3),看起来像函数的调用方式 function(args),所以称为函数对象
2 应用
例如,如果要求两个 double 型变量 x、y 的乘积,可以写:
multiplies<double> () (x, y)
less 是 STL 中最常用的函数对象类模板,其定义如下:
template <class_Tp>
struct less
{
bool operator() (const_Tp & __x, const_Tp & __y) const
{ return __x < __y; }
};
要判断两个 int 变量 x、y 中 x 是否比 y 小,可以写:
if( less<int>()(x, y) ) { ... }