-
仿函数就是函数对象
-
函数对象:
-
重载了operator()的类对象
-
使用起来和普通函数一致,所以称为函数对象或是仿函数
-
-
STL中对于仿函数的参数进行了特殊处理,定义了两个特殊类,类里面只有类型定义
-
一元函数类,unary_function
-
template <class Arg, class Result> struct unary_function { typedef Arg argument_type; typedef Result result_type; };
-
- 二元函数类,binary_function
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 T> struct plus : public binary_function<T, T, T> { T operator()(const T& x, const T& y) { return x + y; } }
- 证同
-
任何人数值使用证同函数后,得到的都是自己
-
template <class T> struct identity :public : public unary_function<T, T> { T& operator()(const T& x) const { return x; } }
-
接收一个pair,返回first或second元素
-
template <class Pair> struct select1st : public unary_function<Pair, typedef pair::first_type> { const typename Pair::first_type& operator()(const Pair& x) const { return x.first; } } template <class Pair> struct select2nd : public unary_function<Pair, typedef pair::second_type> { const typename Pair::second_type& operator()(const Pair& x) const { return x.second; } };
- 投射函数
-
返回第一或是第二个参数
-
template <class Arg1, class Arg2> struct project1st : public binary_function<Arg1, Arg2, Arg1> { Arg1 operator()(const Arg1& x, const Arg2&) const { return x; } }; template <class Arg1, class Arg2> struct project2nd : public binary_function<Arg1, Arg2, Arg2> { Arg2 operator()(const Arg1&, const Arg2& y) const { return y; } };