gpt4 book ai didi

c++ - 如何将派生对象添加到 unique_ptr 的 vector 中

转载 作者:太空狗 更新时间:2023-10-29 20:03:52 24 4
gpt4 key购买 nike

如何将不同的派生对象添加到 unique_ptr 的 vector 中。使用指针 vector ,我将创建项目,然后创建指向对象的基指针,并传递要添加的指针,但 make_unique 不采用指针,我不想为每种类型的派生对象创建重载函数。

class Base{...};

class Item:public Base{...};

Add_Item(Base* thing)
{
vec.push_back(thing);
}

//Problem with this is i have multiple derived objs and would rather have 1 Add_Item instead of multiple Add_Item functions.(if possible)
Add_Item(Item thing)
{ //this runs,but i lose anything that was in Item class
vec.push_back(make_unique<Base>(thing));
}

/------------------------------------

跟进问题,你能不能在另一个里面有一个 unique_ptr 的 vector 。我已经尝试过这个,(你们向我展示的两种方式,模板 Add_Item 函数和项目 Add_Item 函数)。但都产生了错误。

class Item: public Item
{ vector<unique_ptr<Base>>inv }

Item bag;
Item n_bag;
bag.Add_Item<I>(n_bag);

follow up follow up,不,你不能,任何使用什么样的智能指针的建议

最佳答案

unique_ptr<T>有一个从 unique_ptr<U> 移动的构造函数不同类型的U只要指向第二种类型的指针可以隐式转换为指向第一种类型的指针,并且 U不是数组类型。所以只需使用 vec.push_back(make_unique<Item>(thing)); .参见 demo .

接受从Base派生的一切, 使用模板:

template <typename D>
void AddItem(const D& thing) {
vec.push_back(make_unique<D>(thing));
}

如果D不是来自 Base ,您在 push_back 处遇到编译错误.

关于c++ - 如何将派生对象添加到 unique_ptr 的 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794835/

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