模板类在c++中的模板继承

Template class in c++ inheritance in template

本文关键字:继承 c++      更新时间:2023-10-16

我有一个模板类。

   template <class A> class TemplateClass
  {
      //functions
  }

和我有以下类

 class B : A
 {
      //functions
 }
 class C : A 
{
   //functions
}

我的疑问是为什么不可能定义如下:

TemplateClass<A> *instance;
instance = new TemplateClass<B>; // A is the super class of B

Thanks in advance

AB的基类,但TemplateClass<A>不是TemplateClass<B>的基类。

你在做毫无根据的假设,同时混合模板元编程和OOP。

使用相同模板类但具有不同模板形参的两个对象是不相关的。使用TemplateClass<A>初始化的模板类与TemplateClass<B>是完全不同的类型,甚至不考虑AB类之间的关系。

这样想。当您创建模板类时,您实际上并不是在创建一个类,而是在为一个类创建一个模板。如果你有下面的模板类:

template <typename T>
class MyTemplate
{
public:
    T *m_pFoo;
}

如果使用以下代码创建该模板类的两个实例:

MyTemplate<A> aTemplate;
MyTemplate<B> bTemplate;

编译器(至少在概念上)扩展模板来创建两个独立的类:

class MyTemplate_typenameA
{
public:
    A *m_pFoo;
}
class MyTemplate_typenameB
{
public:
    B *m_pFoo;
}

请注意,这些编译器生成的类不共享任何基类,因此,如果AB是相关的,则不能像使用它们那样使用它们。