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

时间:2015-05-21 12:59:08

标签: c++

我有一个模板类。

   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

提前致谢

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

使用具有不同模板参数的相同模板类的两个对象不相关。使用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相关,则无法使用它们。