为什么要用仿函数
函数指针不灵活,难以与STL其他组件配合使用
Adapter
将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作
STL中的adapter
function adapter
改变functor的接口,一般通过函数组合来体现
container adapter
改变container的接口, 如queue和stack其实是deque修改而来
iterator adapter
改变iterator的接口,如
- insert iterator 将一般迭代器的赋值转变为插入,如copy函数的代码
- back_inserter(Container& x)
- front_inserter(Container& x)
- inserter(Container& x, Iterator i)
- reverse iterator 将一般迭代器的行进方向逆转
- iostream iterator 将迭代器绑定到某个iostream对象上
- istream iterator 如将operator++变为operator>>
总结
仿函数重载operator()
迭代器重载operator*,operator++等指针惯常行为
容器和迭代器身上的配接器是一种模板
参考
- STL源码剖析第8章