C++templates第十章模板基本术语

介绍一些模板的基本术语

类模板还是模板类

关于该如何称呼一个是模板的类,有一些困扰:

  • 术语 classtemplate 是指这个 class 是模板。也就是说它是一组 class 的参数化表达。
  • 术语 templateclass 则被:
    • 用作 classtemplate 的同义词。
    • 用来指代从 template 实例化出来的 classes。
    • 用来指代名称是一个 template-id(模板名 +<模板参数>)的类。

替换、实例化、特例化

  • 在处理模板相关的代码时,C++编译器必须经常去用模板实参替换模板参数。
  • 用实际参数替换模板参数,以从一个模板创建一个常规类、类型别名、函数、成员函数或者 变量的过程,被称为“模板实例化”。
  • 通过实例化或者不完全实例化产生的实体通常被称为特例化

唯一定义法则

C++语言中对实体的重复定义做了限制。这一限制就是“唯一定义法则,目前只要记住以下基础的 ODR 就够了:

  • 常规(比如非模板)非 inline 函数和成员函数,以及非 inline 的全局变量和静态数据成 员,在整个程序中只能被定义一次。
  • Class 类型(包含 struct 和 union),模板(包含部分特例化,但不能是全特例化),以及 inline 函数和变量,在一个编译单元中只能被定义一次,而且不同编译单元间的定义应该相同。