我还是C++的新手,遇到了一个我似乎无法在地图中插入新派生类的问题.
我的代码简化如下:
std::map<int, std::unique_ptr<Base_Class> > m;
void func(){
for(int num = 0; num < 100; n++){
m.emplace(num, new Derived_Class() );
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
error: no matching function for call to 'std::pair <const int, std::unique_ptr<Base_Class> >::pair(int&, Derived_Class*)
Run Code Online (Sandbox Code Playgroud)
我尝试过使用失败:
m.emplace(std::pair(num, new Derived_Class()) );
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
error: no matching function for call to 'std::pair<const int, std::unique_ptr<Base_Class> >::pair(std::pair<int, Derived_Class*>)
Run Code Online (Sandbox Code Playgroud)
我似乎无法想出这个,并希望得到任何帮助.
m.emplace(num, std::unique_ptr<Derived_Class>(new Derived_Class()));
Run Code Online (Sandbox Code Playgroud)
将是要走的路.由于unique_ptr构造函数采用原始指针是显式的,因此无法从a隐式初始化Derived_Class*.您需要显式创建一个unique_ptr要放置的对象.
我提出这个解决方案,因为你提到了c ++ 11,但真正有利的方法是使用std::make_unique<Derived_Class>()(c ++ 14及以后),既避免重复自己,又创建unique_ptr"atomic".