STL学习笔记8 -- 函数对象

时间:2023-03-09 18:44:09
STL学习笔记8 -- 函数对象

  重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()来实现的。

  函数对象更重要的作用是实现函数回调,可以替代指针实现函数回调。

定义如下:

struct int_max
{
int operator()(int x,int y)
{
return x>y?x:y;
}
};

  调用时生成一个对象:

    int_max int_max1;
cout<<int_max1(,)<<endl;

  其中int_max1(3,6)的调用不是函数形式,而是int_max1.operator()(3,6);

  通常函数对象中不定义构造函数和析构函数,因此在这创建和销毁过程中不会出现任何问题。

  而且还可以通过模板实现多样性。

  类声明如下:

class T_max
{
public:
template <class T>
T operator()(T x,T y)
{
return x>y?x:y;
}
};

  函数定义如下:

template <class T>
void max_test(T a,T b,T_max &ma)
{
cout<<ma(a,b)<<endl;
}

  使用如下:

    T_max max1;
cout<<max1(,)<<endl;
max_test(,,T_max());//这里也可以使用临时对象

  函数对象的使用,比指针安全多了,以后函数回调时可使用其替代函数指针。