繁体   English   中英

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

[英]Template class in c++ inheritance in template

我有一个模板类。

   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

提前致谢

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

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

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

这样想吧。 创建模板类时,实际上并不是在创建类,而是在为class创建模板 因此,如果您具有以下模板类:

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相关,则不能像使用它们那样使用它们。

暂无
暂无

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

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