C++ 如何使用std::auto_ptr实现协方差分配?

C++ 如何使用std::auto_ptr实现协方差分配?,c++,templates,auto-ptr,C++,Templates,Auto Ptr,我有以下用例,但我不知道如何使其工作: enum MyTemplateEnum { A, B }; template<MyTemplateEnum T = A> class MyTemplateClass<T> { // ... }; std::string argument = ...; std::auto_ptr<MyTemplateClass<> > instance; if (argument == "a") { std::au

我有以下用例,但我不知道如何使其工作:

enum MyTemplateEnum { A, B };
template<MyTemplateEnum T = A>
class MyTemplateClass<T> {
   // ...
};

std::string argument = ...;
std::auto_ptr<MyTemplateClass<> > instance;
if (argument == "a") {
  std::auto_ptr<MyTemplateClass<A> > temp(new MyTemplateClass<A>(...));
  instance = temp;
} else
if (argument == "b") {
  std::auto_ptr<MyTemplateClass<B> > temp(new MyTemplateClass<B>(...));
  instance = temp;
}
enum MyTemplateEnum{A,B};
模板
类MyTemplateClass{
// ...
};
字符串参数=。。。;
std::auto_ptr实例;
如果(参数==“a”){
std::auto_ptr temp(新的MyTemplateClass(…);
实例=temp;
}否则
如果(参数==“b”){
std::auto_ptr temp(新的MyTemplateClass(…);
实例=temp;
}

这会导致编译错误,因为我基本上无法将具体实现
std::auto_ptr
分配给泛型版本
std::auto_ptr

MyTemplateClass
模板的所有实例化都需要一个公共基类。否则,所有的安装都是不相关的类

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>(...));
}
类MyTemplateBase{
公众:
//别忘了虚拟析构函数。
虚拟~MyTemplateBase(){}
};
模板
类MyTemplateClass:公共MyTemplateBase{
};
std::auto_ptr实例;
如果(参数==“a”){
reset(新的MyTemplateClass(…);
}else if(参数==“b”){
reset(新的MyTemplateClass(…);
}

请注意,
std::auto_ptr
已过时。如果可能,请使用
std::unique_ptr
boost::scoped_ptr

MyTemplateClass看起来像什么?您是否正在尝试将指向
MyTemplateClass
的指针分配给指向
MyTemplateClass
的指针?我希望协方差分配起作用,即将专用指针分配给通用引用,而不管模板实现是什么。