繁体   English   中英

从模板参数派生类

[英]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 ,继承自A1A2 ,而实际上是一个类Derived<A1>Derived<A2> 您传递给模板参数的数据成为类的一部分。 Delcaring Derived<A1>并将A1传递给模板参数T实例化一个类模板。

我认为 这里解释得更好:

模板实例化涉及为模板参数的特定组合生成具体的类或函数(实例)。

并且根本没有Derived类。 正如max66在评论中指出的, Derived不是一个类,而是一个类模板,不会单独编译,没有实例化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM