仿函数和函数对象
容易写一些小的组件融入到标准库中,作为辅助,functor只为了算法来服务
仿函数
使用函数模版实现,使用时指定参数类型
identity. select1st, select2nd;
标准库提供的functor都有继承关系,我们自己写的都是单独的struct,没有继承表示没有融入STL的体系结构
在gnuc 4.9中名称发生了改变,用户代码要进行修改
less<int>(); // 产生了一个临时的对象
greater<int>(); // 产生了一个临时的对象,降序排列
- 继承了什么? binary function
仿函数的可适配条件(adaptable)
这个仿函数能否被修改,调整 即被适配器适配。
- 两个类,unary 一元运算, binary二元运算
- 理论上大小是0,被继承的话就真的是0了
- 里面只定义了typedef,派生类只继承了这三个typedef,没有额外的开销
- 继承不光是继承数据和函数调用权,也可以继承typedef,这种继承在标准库中大量出现
- 被adapter修改的时候会使用到这些typedef
eg 适配器在工作的时候需要什么信息
typename Operation::second_argument_type value; // 如果编译通过,就获得了第二个参数的类型
所以functor想要正常工作,必须要继承相应的class,以继承相应的typedef,在适配的时候提供信息。