一、函数对象
1、函数对象(function object)也称为仿函数(functor)
2、一个行为类似函数的对象,它可以没有参数,也可以带有若干参数。
3、任何重载了调用运算符operator()的类的对象都满足函数对象的特征
4、函数对象可以把它称之为smart function。
5、STL中也定义了一些标准的函数对象,如果以功能划分,可以分为算术运算、关系运算、逻辑运算三大类。为了调用这些标准函数对象,需要包含头文件<functional>。
二、自定义函数对象
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream>
using namespace std; class CFunObj { public: void operator()() { cout << "hello,function object!" << endl; } }; int main() { CFunObj fo; fo(); CFunObj()(); return 0; } |
注意:CFunObj()(); 表示先构造一个匿名对象,再调用operator();
三、函数对象与容器
在这边举map 容器的例子,大家都知道map 在插入元素的时候会自动排序,默认是根据key 从小到大排序,看map 的定义:
C++ Code
1
2 3 4 5 6 7 8 9 10 |
// TEMPLATE CLASS map template < class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair< const _Kty, _Ty> > > class map : public _ |