【问题标题】:Insert unique_ptr in vector as pair在向量中插入 unique_ptr 作为对
【发布时间】:2017-11-21 17:37:34
【问题描述】:

我有以下向量:

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,在第二种情况下 - no instance of overloaded function

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

谢谢你的帮助。

【问题讨论】:

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


【解决方案1】:

不要将模板参数传递给std::make_pair。只是让他们推断。请参阅 Steven Lavavej 的this video(link)。 (感谢路人提供链接)

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);

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 2014-07-21
    • 1970-01-01
    • 2019-02-06
    • 2018-09-23
    • 2013-05-31
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多