使用unique_ptr作为值初始化静态std :: map

弗拉顿

一个如何初始化静态映射,其中value是std::unique_ptr

static void f()
{
    static std::map<int, std::unique_ptr<MyClass>> = {
        { 0, std::make_unique<MyClass>() }
    };
}

当然,这是行不通的(std::unique_ptr删除了的copy-ctor )。

是否可以?

怀念

问题是从std::initializer-list副本构造其内容。(中的对象std::initializer_list是固有的const)。解决问题的方法:您可以通过单独的函数初始化地图...

std::map<int, std::unique_ptr<MyClass>> init(){
    std::map<int, std::unique_ptr<MyClass>> mp;
    mp[0] = std::make_unique<MyClass>();
    mp[1] = std::make_unique<MyClass>();
    //...etc
    return mp;
}

然后叫它

static void f()
{
    static std::map<int, std::unique_ptr<MyClass>> mp = init();
}

看到它住在Coliru

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化值为std :: vector的std :: map的最佳方法是什么?

在C ++中初始化静态std :: map <int,unique_ptr <int >>

C ++ std :: unique_ptr存储在std :: map内部,使用删除的函数会形成不良

在std :: map中使用初始化列表

使用braced-init初始化std :: shared_ptr <std :: map <>>

如何初始化std :: map项目的std :: vector?

在编译时初始化静态const std :: map吗?

推荐的方法来使std :: unique_ptr的数组类型不进行值初始化?

使用初始化列表的vector <unique_ptr <A>>

使用本地原始指针初始化std :: unique_ptr时会发生什么?

std :: map的谓词与初始化列表

从初始化列表构造std :: map <T,unique_ptr <S >>时出错

初始化boost :: fusion :: map值

如何使用列表初始化来初始化`std :: map <std :: string,CodeInfo>`?

std :: unique_ptr与std :: map

使用构造函数初始化您的类,该构造函数使用带有括号括起来的初始化程序将std :: map作为参数

初始化std :: unique_ptr作为原始数组指针的初始化

无法使用std :: unique_ptr初始化指针

如何初始化std :: unique_ptr <std :: unique_ptr <T> []>?

std :: unordered_map内部的std :: array的值初始化

使用unique_ptr作为值初始化const静态std :: map

延迟初始化std :: unique_ptr

C ++ std :: unique_ptr在std :: map中

使用iota初始化unique_ptr的容器

使用std :: vector的std :: map初始化

初始化我的std :: map

初始化std :: unordered_map的std :: list元素

使用通用值初始化 std::map 而不重复

使用`unique_ptr`创建一个`map`