第13章 模板
13.1 Introduction(引言)
1.模板 是生成类或函数的框架。
- 与类或函数显式指定数据类型不同,模板使用形参。
- 当实际数据类型赋值给形参的时候,才由编译器生成类或函数。
2.函数模板允许功能相同参数类型和返回值类型不同的的两个函数被一个单独的函数取代,
在这个单独的函数里,形参数据类型用T(T表示一种类型)表示,
从而提供一个泛型或类型无关的函数,它适用于所有的数据类型。
13.2 Function templates(函数模板)
1.函数模板的声明由关键字template和包含一个或多个数据类型形参的参数列表构成。
2.形参数据类型前面可以是关键字class,也可以是意义更明确的关键字typename。
3.类型形参T要用尖括号<和>括起来。当同时使用多种数据类型的形参时,它们之间要用逗号分开。
4.这个过程称为模板的实例化,其结果是由编译器产生的一个常规函数。
13.3 Class templates(类模板)
1.模板能够用来生成完整的C++ 类。
- 模板允许一个类用于所有数据类型
2.类模板也称为参数化类型。
参数化类型是由其他数据类型甚至是一些未指定的数据类型来定义的数据类型。
3.引用类模板时必须包含它的形参列表。
4.为了创建模板,首先要写一个非模板特定数据类型的函数或者类。 当这个指定数据类型的函数或者类运行得令人满意后,再用模板形参来取代其中的特定数据类型。
Programming Pitfalls(易犯的错误)
1. 不要以为函数原型中的所有运算符都适合作为传递给模板形参的数据类型。
using the function template maximum() in program P13A for objects of a point class, An error occurs if > is not verloaded in the definition of the point class.
2. 每一个模板形参前都必须写上关键字typename。
模板< typename T1,T2 >会带来一个错误,因为 typename也应该先于T2。
3. 每一个指定的类型形参都必须在函数中使用。