编写可适配的函数对象(Effective stl 条款40)

本文介绍了STL中仿函数适配的重要性,讲解了unary_function和binary_function的作用,它们提供了对象适配器所需的typedef。通过分析plus和binder1st的实现,揭示了这两个基类如何帮助仿函数与对象适配器如bind1st配合工作。文章还探讨了自定义仿函数类时,如何通过继承或直接定义typedef来确保可适配性。
摘要由CSDN通过智能技术生成
编写可适配的函数对象
Effective STL
Effective STL 书中条款 40 提到,要使我们自己写的仿函数类可适配,仿函数类必须从类 unary_function
或者 binary_function 继承,因为这两个类提供了对象适配器需要的 typedef
 
list<Widget>  widgets;
//...

list<Widget>::reverse_iterator i1 =      //找到最后一个不
find_if(widgets.rbegin(), widgets.rend(),//合阈值的widget
           not1(MeetsThreshold<int>(10)));//不管意味着什么)
Widget w(构造函数实参);
list
<Widget>::iterator i2 =              //找到第一个在由

find_if(widgets.begin(), widgets.end(), //WidgetNameCompare定义
           bind2nd(WidgetNameCompare(), w);// 的排序顺序上先于w的widget
  
如果我们没有把仿函数类继承自 unary_function binary_function ,这些例子都不能编译,因为 not1 bind2nd 都只和可适配的函数对象合作。书上告诉我们的理由是:对象适配器需要 unary_function binary_function 提供的 typedef 才能工作,所以我们的仿函数类必须继承自这两个类。
按照这个理由编写的仿函数类确实能很好的配合类适配器工作,但是,这两个神秘的类到底做了些什么呢?为了搞清楚这两个的类,最好的办法还是把源码搬出来,看看它到底做了些什么。
 
plusbind1st为例来作分析。plus是一个可适配的类,继承自binary_function,可以和适配器bind1st合作,这些函数和类都在functional头文件中。
先来这个unary_function类:
 
// TEMPLATE STRUCT unary_function
template<class _Arg,class _Result>
struct  unary_function
{    // base class for unary functions
  
     typedef _Arg argument_type;//参数类型
     typedef _Result result_type;//函数返回类型
 
} ;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值