实例化和专业化的定义是相互依赖的
Definition of instantiation and specialization are both dependant on each other
在标准中,[temp.spec]/4句子2表示:
专门化是实例化或显式专门化的类、函数或类成员。
然而,[temp.inst]/1句子1表示:
除非类模板专门化已显式实例化或显式专门化,否则当在需要完全定义的对象类型的上下文中引用专门化时,或者当类类型的完整性影响程序的语义时,类模板专门性将隐式实例化。
因此,专门化是实例化的类/函数/成员,但在引用专门化之前不会实例化?有人请向我解释一下。
- 显式实例化→完成,也成为一种专业
- 明确专门化→完成了,所以你得到了专业化
-
否则
·特殊化是在需要完整类型的上下文中引用的
·,但特殊化还不知道
.则:
→编译器将尝试为您实例化它
→这样做的效果是创建您引用的专业化。
定义在其自身上循环。它只是说,若你们在并没有明确要求的情况下命名它,编译器会很聪明地为你们命名,而不是抱怨。
基本上,这是一条允许我们使用模板的规则,而不必为我们将要使用的所有类型显式实例化。
将评论烘焙成答案:
- 模板可以被认为是一个有空格的配方。例如:"T派">
- 专业化是指填充了一些空格(部分专业化)或所有空格(完全专业化)的配方
- 引用一个专业化就是命名它。例如,大声说出"苹果派",我指的是我的T派食谱中的苹果专业化
- 实例化实际上就是在做馅饼
要烹饪馅饼,我必须放入实际的配料,所以烹饪苹果派也使"苹果派"的概念存在。
隐式实例化部分意味着你不需要明确地告诉编译器"有了t派食谱,你可以做苹果派、梨派、韭菜派……"。当你向它要苹果派的那一刻,它就知道你的意思,并做了一个派<苹果>。
相关文章:
- 为什么即使直到最后才定义实际类型,也可以将依赖名称视为完整
- (Wix 安装程序)如何包含自定义操作依赖项
- 如何定义依赖于参数包转换的函数的返回类型
- FBString 的小字符串优化是否依赖于未定义的行为?
- 错误 LNK1104:错误消息中显示的路径未在其他依赖项中定义
- 循环依赖结构,使用前向声明时结构的错误重定义
- 使用 libpthread 在共享库中未定义的行为,但不将其作为依赖项在 ELF 中
- 如何在C++中声明/定义相互依赖的模板?
- 继承依赖类型定义而不使用结构
- g++ 生成依赖项文件缺少用户定义的标头
- 单独库中的类成员函数定义和链接依赖项
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 如何打破定义嵌套模板类的标头的圆形依赖关系
- 如何定义具有依赖于符号调试的参数的函数
- Visual Studio:用户依赖定义
- 依赖GCC/LLVM的"-fexceptions"在技术上是未定义的行为吗?
- gmp 的 libgmp.so 有哪些依赖关系?我不断收到未定义的引用
- 如何从同一个头文件中定义 2 个类,而一个类依赖于另一个类
- 使用定义相互依赖
- 循环依赖(类对类型定义,类型定义对类),前向声明给出不明确的调用