STL 源码剖析:7、仿函数


历经前数章的 memory pool、iterator-traits、type_traits、deque、RB-tree、hash table、QuickSort、IntroSort … 的复杂洗礼与无情轰炸,你的脑袋快吃不消了吧。这一张是轻松小菜,让我们在此稍事停顿,修生养息。



7.1 仿函数概观


就实现观点而言,仿函数其实上就是一个 “行为类似函数” 的对象。为了能够 “行为类似对象”,其类别定义中必须自定义 function call 运算子。

按照操作符个数分类:一元仿函数、二元仿函数。

按照功能分类:算术运算、关系运算、逻辑运算。



7.2 可配接的关键


为了拥有配接能力,每一个仿函数必须定义自己的相应型别。这些相应型别是为了让配接器能够取出,获得仿函数的某些信息。相应型别都只是一些 typedef,所有必要操作在编译器就全部完成了。

仿函数的相应型别主要用来表现函数参数型别和返回值型别。为了方便起见,<stl_function.h> 定义了两个 classes,分别代表一元仿函数和二元仿函数,其中没有任何 data member 或 member functions,唯有一些型别定义。任何仿函数,只要依个人需求选择继承其中一个 class,便自动拥有了那些相应型别,也就自动拥有了配接能力。

7.2.1 unary_function

用来呈现一元函数的参数型别和回返值型别。

7.2.2 binary_function

用来呈现二元函数的第一参数型别、第二参数型别,以及回返之型别。



7.3 算术类仿函数


STL 内建的 “算术类仿函数”,支持加法、减法、乘法、除法、模数和否定,六种运算。



7.4 关系运算类仿函数


STL 内建的 “关系运算符仿函数”,支持等于、不等于、大于、大于等于、小于、小于等于,六种运算。



7.5 逻辑运算类仿函数


STL 内建的 “逻辑运算类仿函数” ,支持 And、Or、Not,三种运算。



7.6 证同、选择、投射


都只是原封不动地传回数据,之所以这样做,是为了间接性 —— 间接性是抽象化的重要工具。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值