向vector中插入unique_ptr作为pair

3

我有以下向量:

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

哪种方法是将此指针插入向量的正确方法?

感谢您的帮助。


1
不知道CRect的定义,无法确定。 - undefined
1
insert 会在没有指向插入位置的 iterator 的情况下工作吗? - undefined
CrectCEdit是标准的MFC类控件。 - undefined
不要在std::make_pair中写入模板参数。 - undefined
1个回答

5
不要将模板参数传递给std::make_pair,只需让它们被推导出来即可。请参阅Steven Lavavej的这个视频(链接)。(感谢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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接