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