C++ 从模板参数派生的类
不允许使用派生类的多个定义,因此以下是编译时错误C++ 从模板参数派生的类,c++,templates,inheritance,C++,Templates,Inheritance,不允许使用派生类的多个定义,因此以下是编译时错误 class A1 { }; class A2 { }; class Derived: public A1 { }; class Derived: public A2 { }; 同样,为什么下面的不是编译时错误? 派生的类是否有两个版本,一个继承自A1,另一个继承自A2 class A1 { }; class A2 { }; template<class T> class Derived:
class A1
{ };
class A2
{ };
class Derived: public A1
{ };
class Derived: public A2
{ };
同样,为什么下面的不是编译时错误?
派生的
类是否有两个版本,一个继承自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>;
}
A1级
{ };
A2类
{ };
样板
派生类:public T
{ };
int main()
{
派生*ptr1=新派生;
派生*ptr2=新派生;
}
从A1
和A2
继承下来的衍生类将不会有两个分类,但从字面上讲,一个衍生类解释得更好:
模板实例化涉及生成一个具体的类或
特定模板组合的函数(实例)
争论
而且根本不会有派生的类。正如max66在评论中指出的那样,派生的
不是一个类,而是一个类模板,它不会单独编译而不实例化。因为派生的
,不同的T
,是不同的classes@anurag86:模板参数是类型的一部分(它们与二进制文件中的类名相混淆)派生的
不是类,而是类模板<代码>派生的
和派生的
是类;但不同,“类的名称保持不变”不是。您有两个不同的类:派生的
和派生的
<代码>派生的
本身不是一个类,而是一个类模板。“它没有被弄坏。”但它是吗typeid(…).name()
分别为我提供了7DerivedI2A1E
和7DerivedI2A2E
。只是在类中添加了几个函数并调用了它们。然后运行nm out | xargs c++filt | grep-Derived
,结果显示没有Derived
,但是Derived
和Derived
。谢谢大家