配接器在 STL 组件的灵活组合运用功能上,扮演着轴承、转换器的角色。Adapter 这个概念,事实上是一种设计模式。《Design Patterns》一书提到 23 个最普及的设计模式,其中对 adapter 样式的定义如下:将一个 class 的接口转换为另一个 class 的接口,使原本因接口不兼容而不能合作的 classes,可以一起运作。
8.1 配接器之概观与分类
STL 所提供的各种配接器中,改变仿函数接口者,我们称为 function adapter,改变容器接口者,我们称为 container adapter,改变迭代器接口者,我们称之为 iterator adapter。
8.1.1 应用于容器
STL 提供的两个容器 queue 和 stack,其实都只不过是一种配接器。
8.1.2 应用于迭代器
STL 提供了许多应用于迭代器身上的配接器,包括 insert iterators,reverse iterators,iostream iterators。
8.1.3 应用于仿函数
function adapter 是所有配接器中数量最庞大的一个族群,其配接灵活度也是前二者所不能及,可以配接、配接、再配接。
8.2 container adapters
8.2.1 stack
8.2.2 queue
8.3 iterator adapters
8.3.1 insert iterators
8.3.2 reverse iterators
8.3.3 stream iterators
8.4 function adapters
当 function adapters 有了完全属于自己的一份修饰对象副本在手,它就成为了该修饰对象副本的主人,也就有资格调用该修饰对象,并在参数和返回值上面动手脚了。
8.4.1 对返回值进行逻辑否定:not1,not2
8.4.2 对参数进行绑定:bind1st,bind2nd
8.4.3 用于函数合成:compose1,compose2
8.4.4 用于函数指针:ptr_fun
8.4.5 用于成员函数指针:mem_fun,mem_fun_ref