Шаблоны раскрываются во время компиляции, поэтому ваша проблема на самом деле такая же, как и следующая:
struct A_float { // struct is easier when everything's public
A(float v) : var(v) {} // (use the ctor-initializer please!)
~A() {}
float var;
}; // don't forget the semicolon
struct A_int {
A(int v) : var(v) {}
~A() {}
int var;
};
int main() {
WhatType* object; // What type here?
if (/* something*/)
object = new A_float(0.2f);
else
object = new A_int(3);
}
Надеюсь, если вы увидели приведенный выше код, вы бы подумали (так же как и «возможно»Я должен использовать шаблоны ")" Мне понадобится общий базовый класс для этого, иначе я рефакторинг".
Когда вы создадитедва типа во время компиляции с использованием шаблона класса, этот вывод один и тот же.
- Я бы порекомендовал рефакторинг, выбрав решение, подобное Puppy's ;создание иерархии наследования просто для обхода недостатка потока логики программы - это программирование в обратном направлении!