You need a common base class for all instantiations of the MyTemplateClass<T>
template. Otherwise all the instatiations are unrelated classes.
class MyTemplateBase {
public:
// Don't forget virtual destructor.
virtual ~MyTemplateBase() {}
};
template<typename T = A>
class MyTemplateClass : public MyTemplateBase {
};
std::auto_ptr<MyTemplateBase> instance;
if (argument == "a") {
instance.reset(new MyTemplateClass<A>(...));
} else if (argument == "b") {
instance.reset(new MyTemplateClass<B>(...));
}
Note that std::auto_ptr
is obsolete. If possible use std::unique_ptr
or boost::scoped_ptr
instead.