C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

彷函数Functors

算法要求一些准则,给一些特定操作,去告诉算法。

下图是标准库列举的三大类:算法类/逻辑运算类/相对关系类

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

非标准,传递x进去,传出first.

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

四个sort算法:default/function/object/explicitly,都是从小到大排序

第五个another comparision,从大到小。

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

写入的适配器融入STL,彷函数适配条件:要会回答问题,需要挑选适当的来继承。

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

存在多种Adapter

也叫改造器。把某一个接口改改或者函数名称改改。做的都比较简单。搭建一个桥梁,取用B的功能。通过继承或者内涵(复合)功能。但是Adapter一般使用复合方法来做。

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

example: 容器适配器stack/queue

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

Binder2nd

function adapter

右上角代码表示count_if,有多少元素判断小于(less)40个函数。bind2nd函数来实现。下图右下角那一块。具体介绍请看代码和注释

函数适配器使用的时候得指定模版参数.

下图执行流程:左上角倒数第二行中 return typename + 小括号:创建对象和传入参数op/x,调用构造函数x和y,构造函数里面记录x和y,然后这个对象会记在count_if里面,不断的调用operator();

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1

注意的是灰色字体是细节部分,左上角那个是转换类型,输入的40转 换成特定type,比如A要修饰B,然后最后返回的类型必须问operatoration你的result type是什么,得保持一样。

核心:把东西记起来,以备不时之需,回答出问题才能适配adapter。typename就是强调Operator这个类型。

not1

句句修饰,下图右上角意思是不小于40。

not1接受红色部分,实参推导,记起来参数,调用operator将记起来的参数用起来。

C++ STL 体系结构与内核分析(六)彷函数适配器/Adapter/Binder2nd/not1