【发布时间】:2013-08-19 17:47:12
【问题描述】:
我有这个函数应该生成不同的派生对象并以unique_ptr<base> 的形式返回:
class base {}; // contains pure functions.
class derived1 {}; // reifies that pure iface.
class derived2 {}; // reifies that pure iface.
unique_ptr<base> factory::load(int param)
{
switch (param)
{
case PARAM_MAIN:
return new derived1();
// return std::move(new derived1());
case PARAM_2:
return new derived2();
case ...:
return new derived...();
}
}
即使使用 std::move,我也无法完成这件事。 (也使用了dynamic_cast,但可能做错了)。
这是我得到的错误:(ArchLinux 上的 gcc (GCC) 4.8.1 20130725 (prerelease))
could not convert '(std::shared_ptr<base::model>((*(const std::shared_ptr<base::model>*)(& associatedModel))), (operator new(48ul), (<statement>, ((derived1*)<anonymous>))))' from 'derived1*' to 'std::unique_ptr<base>'
associatedModel));
我希望我已经清楚自己想要做什么。
我该怎么做?谢谢。
【问题讨论】:
-
"这是我得到的错误" 不知何故,我认为代码不会给出该错误。特别是因为它提到了
shared_ptr,您没有使用它。您的代码中似乎有一些您没有向我们展示的内容。 -
derived1和derived2是否应该从base继承?因为现在您正试图在正交类型之间进行隐式转换,这通常是不允许的(也不是一个好主意)。
标签: c++11 polymorphism unique-ptr upcasting