2014-09-11 2 views
0

Пусть этот псевдокод:Возможно ли создать класс шаблона с более поздним определением типа?

Generic<unknown_type>* p; 

if (type == A) 
p = new Generic<AClass>; 
else if (type == B) 
p = new Generic<BClass>; 
else 
p = new Generic<CClass>; 

Можно ли создать указатель на шаблон класса без типа?

+0

Параметры шаблона должны быть известны во время компиляции. Вы должны изучить альтернативу, такую ​​как динамический полиморфизм. –

ответ

1

Что вы пытаетесь сделать, так это определить тип шаблона во время выполнения, но это отрицает саму природу шаблонов в C++, которые предназначены для определения во время компиляции.

Таким образом, то, что вы пытаетесь сделать, невозможно.

2

Можно объявить класс шаблона, использовать указатели для него, а затем предоставить определение. Но на самом деле это не то, что пытается сделать ваш код.

Вы пытаетесь объявить и использовать переменную с неполным типом. Это недопустимо. Однако вы можете параметризовать весь фрагмент кода, поэтому он тоже становится шаблоном. Затем он читает больше как:

Generic<TypeParam>* p = new Generic<TypeParam>; 

и в зависимости от TypeParam, может быть расширен (только во время компиляции) любой из трех случаев показывают.

Чтобы сделать выбор типа во время выполнения, вам понадобится общий базовый класс. Специализации шаблонов никак не связаны с наследованием.

0

Нет. Это невозможно.

Generic<AClass>, Generic<BClass> и Generic<CClass> все разные типы без общего базового класса.

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