函数对象
在线资料
维基百科:http://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0%E5%AF%B9%E8%B1%A1
函数对象的基本概念
函数按照传入参数个数的不同可以分成:Generator Function(无参函数)、Unary Function(一元函数)、Binary Function(二元函数)、Ternary Funtion(三元函数)等等,它们各自表示能以F()、F(x)、F(x, y)、F(x, y, z)的形式出现的函数。
顾名思义,函数对象就是在某种方式上工作地像一个函数的类对象。典型的,函数对象是一个类的实例,并且这个类重载了操作符 operator()。
predication(谓词):返回bool类型的函数对象叫做谓词。一个返回bool值的Unary Function称作Unary Predication(一元谓词);返回bool值的Binary Function称作Binary Predicate(二元谓词)。
函数对象的基本形式
函数对象类型基本形式如下:
class FunctionClass { public: bool operator() (param_list) { ...... } };
函数对象的使用举例
这里以sgi stl中内置谓词为例:
// sgi stl v3.3 // stl_function.h // 一元谓词基类 template <class _Arg, class _Result> struct unary_function { typedef _Arg argument_type; typedef _Result result_type; }; // 二元谓词基类 template <class _Arg1, class _Arg2, class _Result> struct binary_function { typedef _Arg1 first_argument_type; typedef _Arg2 second_argument_type; typedef _Result result_type; }; // 求负数运算 template <class _Tp> struct negate : public unary_function<_Tp, _Tp> { _Tp operator() (const _Tp& __x) const { return -__x; } }; template <class _Tp> struct plus : public binary_function<_Tp, _Tp, _Tp> { _Tp operator() (const _Tp& __x, const _Tp& __y) const { return __x + __y; } };