专业化的隐式实例化

Implicit instantiation of specialization

本文关键字:实例化 专业化      更新时间:2023-10-16

我不明白为什么标准首先为模板定义模板实例化如下N3797::14.7/4 [temp.spec]:

实例化函数、类或类成员的行为模板或成员模板被称为模板实例化

但在任何地方,它都使用的专业化的初始化,如以下N3797::14.7/4 [temp.spec]:

实例化的模板专用化可以是隐式的为给定的参数列表实例化(14.7.1)或显式实例化(14.7.2)。

我不明白。模板本身与模板指定是不同的概念,模板指定可以是explicit specializationpartial specialization。例如N3797::14.5.5/1 [temp.class.spec]:

主要模板应在该模板。

我的问题是,为什么标准首先为模板声明instatiation概念,但它进一步将该概念应用于模板专业化?

此外,N3797::14.7/4 [temp.spec]对专业化概念的定义如下:

专业化是一个类、函数或类成员实例化或明确专门化(14.7.3)。

所以,部分专业化不是专业化,是吗?我完全被这些概念弄糊涂了。你能澄清一下吗?

这是一个类似的问题。现在,我试着再次回答这个问题。

模板是一种类型的无限,所以我们不能实例化一个模板,我们只能实例化模板专用化

  • 隐式实例化,当前编译单元需要使用模板代码,编译器自动实例化模板专用化。

  • 显式实例化,我们手动输入代码,使编译器实例化模板专用化。

  • 显式专门化,给定所有模板参数,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化
  • 部分专业化,一些参数是给定的模板,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化