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;
}