在向量中插入 unique_ptr 成对

dre*_*pol 2 c++ stl vector unique-ptr std-pair

我有以下向量:

std::vector< std::pair< std::unique_ptr<CEdit>, CRect >> m_editCtrls;
Run Code Online (Sandbox Code Playgroud)

我试图在这里插入一些数据:

std::unique_ptr<CEdit> edit = std::make_unique<CEdit>();
CRect rectEdit;
//Init edit....
//1 - This doesn't work
std::pair< std::unique_ptr<CEdit>, CRect > pair = std::make_pair<std::unique_ptr<CEdit>, CRect>(std::move(edit), rectEdit);
//2 - This also
m_editCtrls.insert(std::make_pair(std::move(edit), rectEdit));
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,我收到错误 - no instance of function template,在第二种情况下 - no instance of overloaded function

将这个指针插入向量的正确方法是什么?

感谢帮助。

Ben*_*ley 5

不要将模板参数传递给std::make_pair. 就让他们来推断吧。请参阅Steven Lavavej 的此视频(链接)。(感谢路人找到链接)

std::pair<std::unique_ptr<CEdit>, CRect> pair = std::make_pair(std::move(edit), rectEdit);
Run Code Online (Sandbox Code Playgroud)

std::vector没有命名的函数insert只接受一个参数。你必须为一个位置传递一个迭代器。也许你正在寻找push_back

m_editCtrls.push_back(std::make_pair(std::move(edit), rectEdit));
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,emplace_back

m_editCtrls.emplace_back(std::move(edit), rectEdit);
Run Code Online (Sandbox Code Playgroud)