我不明白为什么标准首先为模板定义模板实例化如下N3797::14.7/4 [temp.spec]
:
实例化函数、类或类成员的行为模板或成员模板被称为模板实例化。
但在任何地方,它都使用的专业化的初始化,如以下N3797::14.7/4 [temp.spec]
:
实例化的模板专用化可以是隐式的为给定的参数列表实例化(14.7.1)或显式实例化(14.7.2)。
我不明白。模板本身与模板指定是不同的概念,模板指定可以是explicit specialization
或partial specialization
。例如N3797::14.5.5/1 [temp.class.spec]
:
主要模板应在该模板。
我的问题是,为什么标准首先为模板声明instatiation
概念,但它进一步将该概念应用于模板专业化?
此外,N3797::14.7/4 [temp.spec]
对专业化概念的定义如下:
专业化是一个类、函数或类成员实例化或明确专门化(14.7.3)。
所以,部分专业化不是专业化,是吗?我完全被这些概念弄糊涂了。你能澄清一下吗?
这是一个类似的问题。现在,我试着再次回答这个问题。
模板是一种类型的无限,所以我们不能实例化一个模板,我们只能实例化模板专用化
-
隐式实例化,当前编译单元需要使用模板代码,编译器自动实例化模板专用化。
-
显式实例化,我们手动输入代码,使编译器实例化模板专用化。
- 显式专门化,给定所有模板参数,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化
- 部分专业化,一些参数是给定的模板,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化