我有一个模板类。
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
提前致谢
答案 0 :(得分:5)
A
是B
的基类,是的,但TemplateClass<A>
不是TemplateClass<B>
的基类。
在混合模板元编程和OOP的同时,你做了毫无根据的假设。
答案 1 :(得分:1)
使用具有不同模板参数的相同模板类的两个对象不相关。使用TemplateClass<A>
初始化的模板类与TemplateClass<B>
的类型完全不同,甚至不考虑A
和B
类之间的关系。
以这种方式思考。当您创建模板类时,实际上并没有创建类,而是为类创建模板。因此,如果您有以下模板类:
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
相关,则无法使用它们。