#include<iostream>
using namespace std;
class C
{
public:
C(){};
virtual void nothing()=0;
virtual ~C(){};
};
class A : public C
{
public:
A(){};
virtual void nothing(){};
};
class B:public A
{
public:
B(){};
void nothing(){};
};
template <class T>
void hi(T){
cout << " i am something\n";
}
template <>
void hi<A>(A)
{
cout << " I am A\n";
}
template <>
void hi<B>(B)
{
cout << " I am B\n";
}
int main ()
{
C *array [] = {new A,new B};
hi (*array [0]);
hi (*array [1]);
delete array [0];
delete array [1];
return 0;
}
Out: я что-то я что-тоНаследование с шаблонами
В настоящее время я пишу программу, которая имеет дело с
Наследование типов и специализированных шаблонов. В приведенном выше примере мне хотелось бы посмотреть I am A I am B Есть ли способ правильно вызвать функции, соответствующие объектам, хотя я обрабатываю массив базового класса? Я не уверен, что проверка типов и преобразование через dynamic_cast - самое изящное решение. Обратите внимание, что это всего лишь выдержка из более крупной программы. Заранее спасибо
Вы пытаетесь использовать свои объекты полиморфно, но создание экземпляра экземпляра происходит во время компиляции. Вам нужна проверка типа времени выполнения, как и предполагалось. –