首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将派生对象添加到unique_ptr的向量中

如何将派生对象添加到unique_ptr的向量中
EN

Stack Overflow用户
提问于 2014-07-17 12:21:10
回答 3查看 3.7K关注 0票数 4

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

代码语言:javascript
运行
复制
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的向量放在另一个里面吗?我已经尝试过了(你们已经向我展示了两种方法,模板Add_Item函数和项目Add_Item函数)。但两者都产生了错误。

代码语言:javascript
运行
复制
class Item: public Item
{  vector<unique_ptr<Base>>inv }

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

跟进,没有你不能,任何关于使用哪种智能指针的建议

EN

回答 3

Stack Overflow用户

发布于 2014-07-17 12:33:03

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

要接受从Base派生的所有内容,请使用模板:

代码语言:javascript
运行
复制
template <typename D>
void AddItem(const D& thing) {
    vec.push_back(make_unique<D>(thing));
}

如果D不是从Base派生的,则在push_back处会出现编译错误。

票数 6
EN

Stack Overflow用户

发布于 2014-07-17 12:42:07

您希望使AddItem()方法成为模板方法,这样就不必为每个派生类编写不同的函数。修改现有实现:

代码语言:javascript
运行
复制
template <typename DERIVED>
void
AddItem (const DERIVED &thing)
{
    vec.push_back(make_unique<DERIVED>(thing));
}
票数 2
EN

Stack Overflow用户

发布于 2014-07-17 12:31:30

std::make_unique()帮助器函数创建给定类型的新对象。在您的示例中,这是一个Base对象,这不是您想要的。

相反,您可以手动构造所需的std::unique_ptr

代码语言:javascript
运行
复制
vec.push_back(std::unique_ptr<Base>(new Item(thing)));

这将创建一个新的Item,然后从它构造一个unique_ptr<Base>

或者,您也可以简单地创建一个unique_ptr<Item>,当您将其添加到向量中时,让隐式转换将其转换为基指针:

代码语言:javascript
运行
复制
vec.push_back(std::make_unique<Item>(thing));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24794835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档