什么是函数对象?
函数对象(Function Object),也称为仿函数(Functor),是一个定义了operator()的类或结构体实例。函数对象可以像普通函数一样被调用,但它们可以包含状态和行为。这使得函数对象在某些情况下比普通函数更加灵活和强大。
函数对象的定义和使用
- 定义一个函数对象
#include <iostream> // 定义一个函数对象类 class MyFunctionObject { public: // 定义 operator(),使得这个类的实例可以像函数一样被调用 void operator()(int x) const { std::cout << "Called with " << x << std::endl; } };
- 使用函数对象
int main() { MyFunctionObject funcObj; // 实例化函数对象 funcObj(42); // 像调用函数一样调用函数对象 return 0; }
函数对象的优点
- 状态保持:函数对象可以包含成员变量,从而在多次调用之间保持状态。
- 灵活性:可以通过成员函数和成员变量来扩展函数对象的功能。
- 与标准库算法兼容:函数对象可以与C++标准库算法(如std::sort、std::for_each)一起使用。
总结
函数对象是一个定义了operator()的类或结构体实例,可以像函数一样被调用。它们可以包含状态和行为,提供比普通函数更大的灵活性。函数对象在C++标准库算法和状态机等场景中广泛使用。