2015-05-21 2 views
2

У меня есть класс шаблона.Шаблон класса в наследовании 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 

Заранее спасибо

+0

Если у вас есть сомнения, попробуйте! – user463035818

+1

Параметр шаблона - это всего лишь параметр, вы можете поместить любой тип в качестве параметра шаблона, если ваш шаблон совпадает с ним. Однако, я думаю, вы хотите достичь чего-то связанного с наследованием, которое не будет работать (см. Ответ от Lightness) – user463035818

ответ

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.

5

A является базовый класс B, да, но TemplateClass<A> не является базовым классом с TemplateClass<B>.

Вы делаете необоснованные предположения, смешивая метапрограммирование шаблона и ООП.

Смежные вопросы