functor(仿函数)的本质就是实现了operator()的类。
functor相对于直接的函数调用的优势有两点:
1、functor可以保存运行状态(因为是类,可以用类的成员变量来保存)。
2、functor是类型,所以functor可以被用作模板参数。、
一、创建functor
class Functor
{
int sum; // 可保存状态
public:
Functor():sum(0){}
int operator()(int a)
{
if(a>0)
{
sum += a;
return sum;
}
else
{
sum -= a;
return sum;
}
}
};
以上就是一个functor了。
二、使用functor
template <typename Func>
int add(int x, Func &func) // 用作模板参数
{
return func(x);
}
int main()
{
Functor f;
cout<<add(3,f)<<endl;
cout<<add(-8,f)<<endl;
return 0;
}