如何初始化静态映射,其中值为 std::unique_ptr
?
static void f()
{
static std::map<int, std::unique_ptr<MyClass>> = {
{ 0, std::make_unique<MyClass>() }
};
}
当然这是行不通的(std::unique_ptr
的复制构造器被删除)。
这可能吗?
最佳答案
问题是从 std::initializer-list
构建复制其内容。 (std::initializer_list
中的对象本质上是 const
)。
要解决您的问题:您可以从一个单独的函数初始化 map ...
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();
}
关于c++ - 使用 unique_ptr 作为值初始化静态 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213088/