【发布时间】:2015-01-01 23:37:58
【问题描述】:
我最近偶然发现了这样的代码,我无法理解它:
template<typename T>
class A
{
}
class B: A<B>
{
}
所以我的一般问题是:
-
为什么这不会产生编译错误?具体来说,如果
B还没有定义,那么B类如何从模板类A<B>继承? - 什么时候需要这种结构?
【问题讨论】:
-
C++ 不使用一次性编译器。引用代码中进一步定义的内容是完全合法的。
-
这被称为“奇怪重复的模板模式”。
-
@Remy Lebeau 谢谢!看起来像是一些有趣的阅读材料!
-
“为什么这不会产生编译错误?” 模板参数不需要是完整类型,除非模板以需要的方式使用参数它在实例化时是一个完整的类型。
标签: c++ templates inheritance metaprogramming