C++templates第十章模板基本术语
C++templates第十章模板基本术语
Hoshea Zhang介绍一些模板的基本术语
类模板还是模板类
关于该如何称呼一个是模板的类,有一些困扰:
- 术语 classtemplate 是指这个 class 是模板。也就是说它是一组 class 的参数化表达。
- 术语 templateclass 则被:
- 用作 classtemplate 的同义词。
- 用来指代从 template 实例化出来的 classes。
- 用来指代名称是一个 template-id(模板名 +<模板参数>)的类。
替换、实例化、特例化
- 在处理模板相关的代码时,C++编译器必须经常去用模板实参替换模板参数。
- 用实际参数替换模板参数,以从一个模板创建一个常规类、类型别名、函数、成员函数或者 变量的过程,被称为“模板实例化”。
- 通过实例化或者不完全实例化产生的实体通常被称为特例化
唯一定义法则
C++语言中对实体的重复定义做了限制。这一限制就是“唯一定义法则,目前只要记住以下基础的 ODR 就够了:
- 常规(比如非模板)非 inline 函数和成员函数,以及非 inline 的全局变量和静态数据成 员,在整个程序中只能被定义一次。
- Class 类型(包含 struct 和 union),模板(包含部分特例化,但不能是全特例化),以及 inline 函数和变量,在一个编译单元中只能被定义一次,而且不同编译单元间的定义应该相同。