前言
仿函数就是使用起来像函数一样的东西,如果你针对某个class进行operator()重载
,它就成为一个仿函数,但是要成为一个可配接的仿函数,还需要做一些额外的努力。
实例
#include<iostream>
using namespace std;
//由于将operator()重载过了,因此plus成了一个仿函数
template <class T>
struct my_plus {
T operator() (const T& x, const T& y) const { return x + y; }
};
//由于将operator()重载过了,因此minus成了一个仿函数
template <class T>
struct my_minus {
T operator() (const T& x, const T& y) const { return x - y; }
};
int main()
{
//以下产生仿函数对象
my_plus<int> plusobj;
my_minus<int> minusobj;
以下使用仿函数,就像使用一般函数一样
cout << plusobj(3, 5) << endl; //8
cout << minusobj(3, 5) << endl; //-2
//以下直接产生访函数的临时对象(第一对小括号),并调用之(第二对小括号)
cout << plus<int>()(3, 5) << endl; //8
cout << minus<int>()(3, 5) << endl; //-2
return 0;
}
运行结果:
8
-2
8
-2
资料
《STL源码剖析》