8.7.4 函数对象模板
定义函数对象的类一般是由模板来定义的,这么做的理由很明显,这样定义的函数对象能够使用各种实参类型。下面是之前看到过的Area类的模板:
- template<class T> class Area
- {
- public:
- T operator()(const T length, const T width){ return length*width; }
- };
此模板允许定义函数对象来计算任何数值类型尺寸的面积。可以将以前看到的printArea()函数定义为函数模板:
- template<class T> void printArea(const T length, const T width, Area<T> area)
- { cout << "Area is " << area(length, width); }
现在,可以像下面这样调用printArea()函数:
- printArea(1.5, 2.5, Area <double>());
- printArea(100, 50, Area <int>());
函数对象广泛应用于标准模板库,这将在第10章学习,因此,我们将会看到在那种环境下有关函数对象用法的一些实用示例。