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.1 函数模板

函数模板描述了仅用参数或返回值的类型来区分的一组相关函数。

6.1.1 函数模板声明

使用模板之前,请先声明。以下示例中的声明提供了使用模板所需的足够信息,但没有提供实现模板所需的足够信息。

template <class Number> Number twice( Number original );

在此示例中,Number模板参数,它指定模板描述的函数范围。更具体地说,Number模板类型参数,在模板定义中使用它表示确定的模板使用位置处的类型。

6.1.2 函数模板定义

如果要声明模板,请先定义该模板。定义提供了实现模板所需的足够信息。以下示例定义了在前一个示例中声明的模板。

template <class Number> Number twice( Number original )
    { return original + original; }

因为模板定义通常出现在头文件中,所以模板定义必须在多个编译单元中重复。不过所有的定义都必须是相同的。该限制称为一次定义规则

6.1.3 函数模板用法

声明后,模板可以像其他函数一样使用。它们的使用由命名模板和提供函数参数组成。编译器可以从函数参数类型推断出模板类型参数。例如,您可以按以下方式使用以前声明的模板:

double twicedouble( double item )
    { return twice( item ); }

如果模板参数不能从函数参数类型推断出,则调用函数时必须提供模板参数。例如:

template<class T> T func(); // no function arguments
int k = func<int>(); // template argument supplied explicitly