C++ 函数对象
C++ STL 预定义函数对象
简介
函数对象(function object)[note 1]是一个程序设计的对象允许被当作普通函数来调用。
函数对象与函数指针相比,有两个优点:第一是编译器可以内联执行函数对象的调用;第二是函数对象内部可以保持状态。
C++中,函数对象是定义了函数调用运算符的类对象,称作class type functor。
函数对象的特点:
函数对象带有状态:函数对象相对于普通函数是“智能函数”,这就如同智能指针相较于传统指针。因为函数对象除了提供函数调用符方法,还可以拥有其他方法和数据成员。所以函数对象有状态。即使同一个类实例化的不同的函数对象其状态也不相同,这是普通函数所无法做到的。而且函数对象是可以在运行时创建。
每个函数对象有自己的类型:对于普通函数来说,只要签名一致,其类型就是相同的。但是这并不适用于函数对象,因为函数对象的类型是其类的类型。这样,函数对象有自己的类型,这意味着函数对象可以用于模板参数,这对泛型编程有很大提升。
函数对象一般快于普通函数:因为函数对象一般用于模板参数,模板一般会在编译时会做一些优化。
C++ 的函数对象
示例:
1 | class Functor |