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);
, который вообще непонятно зачем нужен.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Решаю небольшую задачку на тему словарейПисал подульно, чтобы было можно сразу найти ошибки
Работающий код, функция testValue() возвращает копию значения:
Подскажите пожалуйста, чем отличается виртуальная функция от шаблонной функции?