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(3,6)<<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(3,6)<<endl; max_test(12,77,T_max());//这里也可以使用临时对象
函数对象的使用,比指针安全多了,以后函数回调时可使用其替代函数指针。
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/3343998.html