gpt4 book ai didi

c++11 - unique_ptr 向上转型作为返回

转载 作者:行者123 更新时间:2023-12-02 23:24:46 25 4
gpt4 key购买 nike

我有这个函数,它应该生成不同的派生对象并返回 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));

我希望我已经清楚自己想做什么。

我该怎么做?谢谢。

最佳答案

您可以执行 unique_ptr<derived1>(new derived1());甚至更好(使用 C++14)使用 std::make_unique .

using namespace std;

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 make_unique<derived1>();
case PARAM_2: return make_unique<derived2>();
case ...: return make_unique<derived...>();
}
}

关于c++11 - unique_ptr 向上转型作为返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288240/

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