概念:
- 重载函数调用操作符的类,其对象常称为函数对象
- 函数对象使用重载的()操作符时,行为类似函数调用,因此也称为仿函数
- 仿函数本质上是一个类,不是一个函数
特点:
- 仿函数可以像普通函数一样调用
- 仿函数可以有自己的状态(即成员属性)
- 仿函数可以作为函数参数传递
#include <iostream>
#include <vector>
#include <string>
class MyAdd
{
public:
int operator()(int v1, int v2)
{
return v1 + v2;
}
};
class MyPrint
{
public:
MyPrint() :count(0) {
}
void operator()(std::string str)
{
std::cout << str << std::endl;
count++;
}
int count;
};
void doPrint(MyPrint& mp, std::string str)
{
mp(str);
}
int main()
{
MyAdd myAdd;
//仿函数可以像普通函数一样调用
std::cout << myAdd(10, 20) << std::endl << std::endl;
MyPrint myPrint1;
myPrint1("Hello World");
myPrint1("Hello World");
myPrint1("Hello World");
//仿函数可以有自己的状态(即成员属性)
std::cout << myPrint1.count << std::endl << std::endl;
MyPrint myPrint2;
//仿函数可以作为函数参数传递
doPrint(myPrint2, "Hello Functor");
system("pause");
return 0;
}