在向量中插入unique_ptr作为对

时间:2017-11-21 17:37:34

标签: c++ vector stl unique-ptr std-pair

我有以下矢量:

<button onclick="document.getElementById('ab').style.backgroundImage='url("pexel.jpg")'">Click me</button>

我正在尝试在此插入一些数据:

std::vector< std::pair< std::unique_ptr<CEdit>, CRect >> m_editCtrls;

在第一种情况下,我收到错误 - 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)); ,在第二种情况 - no instance of function template

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

不要将模板参数传递给std::make_pair。只是让他们推断出来。见Steven Lavavej的this video(link)。 (感谢Passer By寻找链接)

std::pair<std::unique_ptr<CEdit>, CRect> pair = std::make_pair(std::move(edit), rectEdit);

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

m_editCtrls.push_back(std::make_pair(std::move(edit), rectEdit));

甚至更好,emplace_back

m_editCtrls.emplace_back(std::move(edit), rectEdit);