[英]Derived class from template parameter
Derived
类的多个定义是不允许的,因此以下是编译时错误。
class A1
{ };
class A2
{ };
class Derived: public A1
{ };
class Derived: public A2
{ };
同样,为什么下面不是编译时错误? 不会有两个版本的Derived
类,一个从A1
继承而另一个从A2
继承?
class A1
{ };
class A2
{ };
template<class T>
class Derived: public T
{ };
int main()
{
Derived<A1> *ptr1 = new Derived<A1>;
Derived<A2> *ptr2 = new Derived<A2>;
}
不会有两个Derived
,继承自A1
和A2
,而实际上是一个类Derived<A1>
和Derived<A2>
。 您传递给模板参数的数据成为类的一部分。 Delcaring Derived<A1>
并将A1
传递给模板参数T
你实例化一个类模板。
我认为 这里解释得更好:
模板实例化涉及为模板参数的特定组合生成具体的类或函数(实例)。
并且根本没有Derived
类。 正如max66在评论中指出的, Derived
不是一个类,而是一个类模板,不会单独编译,没有实例化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.