gpt4 book ai didi

c++ - std::map 只有移动构造函数可用

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:30 25 4
gpt4 key购买 nike

我有一个带有私有(private)构造函数(我的容器类可以访问)、删除的复制构造函数和默认移动构造函数的类。我如何在 std::map 中使用它?

class Item {
public:
Item(const Item&) = delete;
private:
friend class Storage;
Item(int value);
};

class Storage {
public:
void addItem(int key, int value) {
// what to put here?
}
private:
std::map<int, Item> items_;
};

使用 emplace(key, Item(value)) 不起作用,因为它试图复制构造项目。在 std::move 中包装 Item 具有相同的效果。使用 piecewise_construct 不起作用,因为映射(或映射对)尝试使用私有(private)的普通构造函数。

最佳答案

I have a class with private constructor (that my container class can access), deleted copy constructor, and default move constructor.

错了,你没有默认的移动构造函数。如果声明复制构造函数,则不会获得隐式移动构造函数。您需要显式默认移动构造函数才能获得一个:

class Item {
public:
Item(const Item&) = delete;
Item(Item&&) = default;

// Might be a good idea to declare the two assignment operators too
Item& operator=(const Item&) = delete;
Item& operator=(Item&&) = default;
private:
friend class Storage;
Item(int value);
};

现在您可以使用:

items_.emplace(key, Item(value));

例如插入一个条目。

关于c++ - std::map 只有移动构造函数可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597150/

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