一个如何初始化静态映射,其中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] 删除。
我来说两句