侯捷C++ stl体系结构与源码剖析:函数适配器详解,C++11新特性bind

函数适配器,是去修饰函数,然后还要表现出函数的性质。所以最终还是要重载(),以表现出函数。binder2nd来绑定第二个参数,之前less是x<y,现在是x<40。less< int>()是创建了一个函数对象,不是调用。bind2nd调用了binder2nd,那么最终的效果是less< int>()传进去变成op,40传进去变成value。bind2nd调用过程,重点: 当执行pred(*first)调用的是operator()这个小括号重载函数,才真正调用了le
摘要由CSDN通过智能技术生成

函数适配器,是去修饰函数,然后还要表现出函数的性质。所以最终还是要重载(),以表现出函数。
binder2nd来绑定第二个参数,之前less是x<y,现在是x<40。less< int>()是创建了一个函数对象,不是调用。
bind2nd调用了binder2nd,那么最终的效果是less< int>()传进去变成op,40传进去变成value。
bind2nd调用过程,重点: 当执行pred(*first)调用的是operator()这个小括号重载函数,才真正调用了less。左下角的bind2nd(less< int>,40):这里调用的是bind2nd的构造函数,并把less< int>和40分别赋值给op和value。
所以,适配器只是先记下来,也没有绑定。只有在真正被调用,才会绑定起来。
binder2nd< Operation >是一个类型,加了()是创建一个临时对象。
接下来注意灰色的部分,灰色部分会问三个问题:less的第一个实参是什么type,第二个,和返回的类型都是什么参数。如果能回答这三个问题的函数,被称为函数适配器。
灰色部分的前面有typename,是为了在编译过程中帮助编译器理解后面紧跟的是一个typename(类型),防止编译器出现困惑。
这里还要细节:binder2nd继承了unary_function。binder2nd本身适配了函数,而成为一个新的函数。但是它也可以被适配,由于现在已经确定了一个参数40,所以只剩下一个待传参数。为了能够让_not1适配,就要继承unary_function,然后回答那些问

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值