template<typename T>
class TypeName
{
public:
TypeName(T value)
{
this->value = value;
}
void GetClassSize()
{
cout << (sizeof(value)) << endl;
}
protected:
T value;
};
template<typename T>
class TypeInfo : public TypeName<T>
{
public:
TypeInfo(T value) :TypeName(value)
{
}
void GetTypeName()
{
cout << "Name type: " << typeid(value).name() << endl;
}
};
int main()
{
setlocale(LC_ALL, "ru");
Point pnt(1,3,4);
int a = 1;
TypeInfo<int> c(a);
c.GetClassSize();
c.GetTypeName();
return 0;
}
Первое: При вызове конструктора родителя нужно указать еще и его шаблонные параметры.
Вместо TypeInfo(T value) : TypeName(value)
Нужно TypeInfo(T value) : TypeName<T>(value)
Второе: Раз родитель - шаблон, то к его полям нельзя так просто обратиться. (Подробнее.)
Вместо cout << "Name type: " << typeid(value).name() << endl;
Нужно либо cout << "Name type: " << typeid(this->value).name() << endl;
Либо cout << "Name type: " << typeid(TypeName<T>::value).name() << endl;
Кроме того, из main
надо выбросить Point pnt(1,3,4);
, который вообще непонятно зачем нужен.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Решаю небольшую задачку на тему словарейПисал подульно, чтобы было можно сразу найти ошибки
Работающий код, функция testValue() возвращает копию значения:
Подскажите пожалуйста, чем отличается виртуальная функция от шаблонной функции?