JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:C++ 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分C++ 编译器

1.  C++ 编译器

2.  使用 C++ 编译器

3.  使用 C++ 编译器选项

第 2 部分编写 C++ 程序

4.  语言扩展

5.  程序组织

6.  创建和使用模板

6.1 函数模板

6.1.1 函数模板声明

6.1.2 函数模板定义

6.1.3 函数模板用法

6.2 类模板

6.2.1 类模板声明

6.2.2 类模板定义

6.2.3 类模板成员定义

6.2.3.1 函数成员定义

6.2.3.2 静态数据成员定义

6.2.4 类模板的用法

6.3 模板实例化

6.3.1 隐式模板实例化

6.3.2 显式模板实例化

6.3.2.1 模板函数的显式实例化

6.3.2.2 模板类的显式实例化

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

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

6.4 模板组合

6.5 缺省模板参数

6.6 模板专门化

6.6.1 模板专门化声明

6.6.2 模板专门化定义

6.6.3 模板专门化使用和实例化

6.6.4 部分专门化

6.7 模板问题部分

6.7.1 非本地名称解析和实例化

6.7.2 作为模板参数的本地类型

6.7.3 模板函数的友元声明

6.7.4 在模板定义内使用限定名称

6.7.5 嵌套模板名称

6.7.6 引用静态变量和静态函数

6.7.7 在同一目录中使用模板生成多个程序

7.  编译模板

8.  异常处理

9.  改善程序性能

10.  生成多线程程序

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

6.3 模板实例化

模板实例化是生成采用特定模板参数组合的具体类或函数(实例)。例如,编译器生成一个采用 Array<int> 的类,另外生成一个采用 Array<double> 的类。通过用模板参数替换模板类定义中的模板参数,可以定义这些新的类。在6.2 类模板中介绍的 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;