gpt4 book ai didi

c++ - 如何使用std::auto_ptr实现协方差赋值?

转载 作者:太空狗 更新时间:2023-10-29 21:45:00 28 4
gpt4 key购买 nike

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

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;
}

这会导致编译错误,因为我基本上无法分配具体实现 std::auto_ptr<MyTemplateClass<A> >到通用版本 std::auto_ptr<MyTemplateClass<> > .

最佳答案

MyTemplateClass<T> 的所有实例都需要一个公共(public)基类模板。否则所有实例都是不相关的类。

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>(...));
}

请注意 std::auto_ptr已经过时了。如果可能,请使用 std::unique_ptrboost::scoped_ptr相反。

关于c++ - 如何使用std::auto_ptr实现协方差赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18638216/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com