Вы не можете. ExampleTemplate<int>
и ExampleTemplate<double>
- это два разных, не связанных типа. Если у вас всегда есть переключение между несколькими опциями, используйте boost::variant
.
typedef boost::variant<Example<int>, Example<double>> ExampleVariant;
ExampleVariant v;
switch (number) {
case 1: v = Example<int>(); break;
case 2: v = Example<double>(); break;
}
// here you need a visitor, see Boost.Variant docs for an example
Другой способ - использовать обычный базовый класс с виртуальным общедоступным интерфейсом, но я бы предпочел variant
.
struct BaseExample {
virtual void do_stuff() = 0;
virtual ~BaseExample() {}
};
template <typename T>
struct Example : BaseExample { ... };
// ..
BaseExample *obj;