第七章 仿函数(函数对象)
7.1 仿函数概观
-
什么是仿函数(函数对象)?
就实现观点而言,仿函数实际上是一个“行为类似函数”的对象,为了能够“行为类似函数”,其类别定义中必须自定义(重载、重写)operator()运算符。
简单点说,仿函数就是一个对象,只不过是重载了operator()运算符,并且可以保存状态。
-
为什么要使用仿函数而不使用函数指针呢?
原因在于函数指针不能满足STL对抽象性的要求,也不能和配接器adapter搭配,产生更加灵活的变化。 -
运用系统的仿函数必须包括头文件:
<functional>
-
STL仿函数的分类:
- 操作数分类:
- 一元仿函数
- 二元仿函数
- 功能分类
- 算术运算
- 关系运算
- 逻辑运算
- 操作数分类:
7.2 可配接的关键
为了能够拥有配接能力,每一个仿函数必须定义自己的响应型别。这些型别是为了让配接器能够取出,获得仿函数的某些信息。
- 任何仿函数,若想要拥有与配接器配接的能力,就必须继承其中的任意一个class
- <stl_function.h>中定义的两个仿函数:
- unary_function
//一元仿函数 template <class Arg,class Result> struct unary_function{ typedef Arg argument_type; typedef Result result_type; }
- binary_function
//二元仿函数 template <class Arg1,class Arg2,Class Result> struct binary_function{ typedef Arg1 firs_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; }
- unary_function