gpt4 book ai didi

c++ - 将对象拷贝添加到容器的更好方法

转载 作者:行者123 更新时间:2023-11-30 04:27:17 25 4
gpt4 key购买 nike

我有一个 Bar 类,它存储从 BarItem 派生的对象:

#include <list>
#include <memory>

class Bar {
public:
typedef std::shared_ptr<BarItem> item_ptr;

void add_item(item_ptr item) {
items_.push_back(item);
}

private:
std::list<item_ptr> items_;
};

我有另一个类Note,它是BarItem 的子类。目前要添加我正在做的 Note 对象的拷贝:

Bar my_bar;
Note my_note;

my_bar.add_item(Bar::item_ptr(new Note(my_note)));

有点丑;我想知道是否有更好的方法或自动化的方法?

最佳答案

你实际上无法避免复制(在 C++11 中你可以让它成为一个移动),但你可以“自动化”它,这样你就可以通过重载 add_item 函数来节省几次击键对于每种类型(可能是 BarItem 的子类型)。

template <class T>
typedef enable_if<is_base_of<BarItem, T>::value,void>::type add_item(const T& item) { /* or T&& */
items_.push_back(item_ptr(new T(item)));
}

关于c++ - 将对象拷贝添加到容器的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035403/

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