【问题标题】:Construct std::map with non-copyable value type using initializer list constructor [duplicate]使用初始化列表构造函数构造具有不可复制值类型的 std::map [重复]
【发布时间】:2020-12-27 03:09:44
【问题描述】:

有没有办法使用初始化列表构造函数来构造具有不可复制值类型的 std::map?

看下面的例子

#include <memory>
#include <map>

int main()
{
  std::map<int, int*> int_ptr{{1, nullptr}}; // compiles
  // std::map<int, std::unique_ptr<int>> unique_ptr_int{{1, std::unique_ptr<int>()}}; // Doesn't compile
}

注意:我特意询问这是否可以通过初始化列表构造函数来完成。我知道我可以使用不同的构造函数构造地图并添加元素,但我想知道是否可以使用这个构造函数以及如何使用它,也许使用 std::piecewise_construct 或类似的东西。

【问题讨论】:

    标签: c++


    【解决方案1】:

    我想最简单的做法是将智能指针放在地图中,这样对象就不会被复制。

    std::map<int,std::shared_ptr<myobj>> myobj_Map;
    

    【讨论】:

    • 这不能回答我的问题。问题是我是否可以在值类型不可复制的这种特殊情况下使用初始化列表构造函数,以及如果可能的话如何做到这一点。
    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2015-09-04
    • 2018-11-29
    • 2016-12-29
    • 2012-03-19
    • 1970-01-01
    • 2017-05-31
    • 2012-04-11
    相关资源
    最近更新 更多