函数对象是一种可调用的对象,可以像函数一样使用,但是它是一个对象,可以存储状态,可以被继承,可以被传递。在C++中,函数对象可以通过类来创建,类中重载 operator() 实现可调用对象。使用时可以像函数一样进行调用,也可以将它们作为参数传递给其他函数。
函数对象在STL(Standard Template Library)中广泛使用,比如排序算法中可以传递函数对象作为比较函数,以实现自定义的排序方式。函数对象也可以封装一些算法,使得代码简洁并且可重用。特别的,继承自 std::unary_function 和 std::binary_function 的函数对象类型可以在一些STL算法中特别使用。
在类中创建函数对象是可以的,只需要在类中重载 operator() 即可。函数对象与函数指针的区别在于,函数指针只能调用函数,而函数对象可以存储状态。