编写可适配的函数对象
Effective STL
Effective
STL
书中条款
40
提到,要使我们自己写的仿函数类可适配,仿函数类必须从类
unary_function
或者
binary_function
继承,因为这两个类提供了对象适配器需要的
typedef
。










如果我们没有把仿函数类继承自
unary_function
或
binary_function
,这些例子都不能编译,因为
not1
和
bind2nd
都只和可适配的函数对象合作。书上告诉我们的理由是:对象适配器需要
unary_function
或
binary_function
提供的
typedef
才能工作,所以我们的仿函数类必须继承自这两个类。
按照这个理由编写的仿函数类确实能很好的配合类适配器工作,但是,这两个神秘的类到底做了些什么呢?为了搞清楚这两个的类,最好的办法还是把源码搬出来,看看它到底做了些什么。
以plus和bind1st为例来作分析。plus是一个可适配的类,继承自binary_function,可以和适配器bind1st合作,这些函数和类都在functional头文件中。
先来这个unary_function类:

template<class _Arg,class _Result>
struct unary_function
{ // base class for unary functions
typedef _Arg argument_type;//参数类型
typedef _Result result_type;//函数返回类型
} ;
原来这么简单,只不过是两个
typedef
而已,一个是一元函数的参数类型别名,另一个是返回类型。接着看看
binary_function