专业化的隐式实例化
Implicit instantiation of specialization
我不明白为什么标准首先为模板定义模板实例化如下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)。
所以,部分专业化不是专业化,是吗?我完全被这些概念弄糊涂了。你能澄清一下吗?
这是一个类似的问题。现在,我试着再次回答这个问题。
模板是一种类型的无限,所以我们不能实例化一个模板,我们只能实例化模板专用化
-
隐式实例化,当前编译单元需要使用模板代码,编译器自动实例化模板专用化。
-
显式实例化,我们手动输入代码,使编译器实例化模板专用化。
- 显式专门化,给定所有模板参数,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化
- 部分专业化,一些参数是给定的模板,并给出非泛型代码。一旦模板类型匹配,则实例化此专门化
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 在C 中,当我对其进行专业化时会实例化模板
- Clang和Gcc不同意实例化后的显式专业化
- 明确的专业化“ CheckIntmap<>”实例化
- 了解类模板专业化示例的隐式实例化
- 实例化和专业化的定义是相互依赖的
- 明确的专业化;'std::hash<_Kty>' 已被实例化
- 模板功能实例化和专业化
- 实例化错误后成员函数模板的专业化,以及成员函数的顺序
- 将专业化定义为另一个类的实例化
- 专业化的隐式实例化
- 实例化错误后如何避免专业化
- 为什么模板专业化中的显式实例化会给我带来错误