Sun Studio 12 Update 1:C++ 用户指南

6.3 模板实例化

模板实例化是生成采用特定模板参数组合的具体类或函数(实例)。例如,编译器生成一个采用 Array<int> 的类,另外生成一个采用 Array<double> 的类。通过用模板参数替换模板类定义中的模板参数,可以定义这些新的类。在前面“类模板”一节介绍的 Array<int> 示例中,编译器用 int 替换所有 Elem

6.3.1 隐式模板实例化

使用模板函数或模板类时需要实例。如果这种实例还不存在,则编译器隐式实例化模板参数组合的模板。

6.3.2 显式模板实例化

编译器仅为实际使用的那些模板参数组合而隐式实例化模板。该方法不适用于构造提供模板的库。C++ 提供了显式实例化模板的功能,如以下示例所示。

6.3.2.1 模板函数的显式实例化

要显式实例化模板函数,请在 template 关键字后接函数的声明(不是定义),且函数标识符后接模板参数。


template float twice<float>(float original);

在编译器可以推断出模板参数时,模板参数可以省略。


template int twice(int original);

6.3.2.2 模板类的显式实例化

要显式实例化模板类,请在 template 关键字后接类的声明(不是定义),且在类标识符后接模板参数。


template class Array<char>;

template class String<19>;

显式实例化类时,所有的类成员也必须实例化。

6.3.2.3 模板类函数成员的显式实例化

要显式实例化模板类函数成员,请在 template 关键字后接函数的声明(不是定义),且在由模板类限定的函数标识符后接模板参数。


template int Array<char>::GetSize();

template int String<19>::length();

6.3.2.4 模板类静态数据成员的显式实例

要显式实例化模板类静态数据成员,请在 template 关键字后接成员的声明(不是定义),且在由模板类限定的成员标识符后接模板参数。


template int String<19>::overflows;