-
定义:一种具有函数性质的对象;
在C++11中,仿函数(functor)叫做了函数对象(function object);
仿函数类的对象像函数一样被调用,调用仿函数类的对象时,实际调用的时仿函数类中重载的operator()函数; -
功能:仿函数主要用途是搭配STL算法;
-
分类:算术类仿函数、关系运算类仿函数、逻辑运算类仿函数;
-
函数指针:虽然函数指针也可以作为算法的参数,但是函数指针不满足STL对抽象性的要求;也不能和STL其他组件搭配,产生灵活变化;
-
操作
struct MyPlus//相当于class
{
int operator()(const int &a, const int &b) const{
return a+b;
}
};
int main()
{
MyPlus a;//为这个结构体实例化一个对象
cout<<MyPlus ()(1,2)<<endl;//case 1:通过仿函数类的临时对象来调用重载运算法,后面要加一个小括号
cout<<a(1,2)<<endl;//case 2:通过仿函数类实例化出来的对象 隐士的调用重载运算符;
cout<<a.operator()(1,2)<<endl;//case 3:通过对象显示调用重载运算符;
}
-
制定操作的方法(还不太懂)
1>通常可以通过定义函数,并将函数指针作为参数传递给算法;
2>定义类,并在类中重载operator()函数,使得该类成为一个仿函数类;
3>使用lambda匿名函数(C++11);
4》通过多态函数封装器std::function (C++11) -
参考
源代码