[英]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
提前致谢
A
是B
的基类,是的,但是TemplateClass<A>
不是TemplateClass<B>
的基类。
您在混合模板元编程和OOP时做出了毫无根据的假设。
使用相同模板类和不同模板参数的两个对象无关。 使用TemplateClass<A>
初始化的模板类与TemplateClass<B>
是完全不同的类型,甚至不考虑A
和B
类之间的关系。
这样想吧。 创建模板类时,实际上并不是在创建类,而是在为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;
}
请注意,这些编译器生成的类不共享任何基类,因此,如果A
和B
相关,则不能像使用它们那样使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.