Два объекта с использованием одного и того же класса шаблонов с разными параметрами шаблона не связаны. Класс шаблона, инициализированный с использованием 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
.
Если у вас есть сомнения, попробуйте! – user463035818
Параметр шаблона - это всего лишь параметр, вы можете поместить любой тип в качестве параметра шаблона, если ваш шаблон совпадает с ним. Однако, я думаю, вы хотите достичь чего-то связанного с наследованием, которое не будет работать (см. Ответ от Lightness) – user463035818