隐含的专业化实例化

时间:2015-02-26 04:51:03

标签: c++ templates specialization

我无法理解为什么标准首先定义模板实例化 for templates ,如下所示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)。

所以,部分专业化不是专业化,是吗?我对这些概念感到困惑。你能不能澄清一下吗?

1 个答案:

答案 0 :(得分:0)

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

模板是一种无限的类型,所以我们无法实例化模板,我们只能实例化模板专业化。

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

  • 显式实例化,我们手动输入代码会导致编译器实例化模板专业化。

  • 给定所有模板参数,
  • 显式特化,并给出非通用代码。模板类型匹配后,再实例化此专业化。
  • 部分专业化,一些参数被赋予模板并提供非通用代码。模板类型匹配后,再实例化此专业化。