函数指针有缺点,最重要的是它无法持有自己的状态(局部状态),也无法达到组件技术中的可适配性(也就是无法再将来某些修饰徐条件加上,以达到改变其状态)。因此,STL算法的特殊版本所接受的所谓的”条件“或”策略“或”一整组操作“都是以仿函数呈现的。
所谓仿函数(functor)就是使用起来像函数一样的东西。如果对某个class进行operator()重载,它就是一个仿函数类,该函数就是一个仿函数
//仿函数类
template<class T>
struct Greater
{
//仿函数
bool operator()(const T& a, const T& b)
{
return a > b;
}
};
使用示例:
void test()
{
Greater<int> g;
//原型
bool ret = g.operator()(13, 14);
cout << ret << endl;
//简写形式-使用方法和函数类似
ret = g(13, 14);
cout << ret << endl;
}
运行结果: