admin管理员组文章数量:1794759
Qt QList<std::unique
代码语言:javascript代码运行次数:0运行复制QList<std::unique<Concat>> m_contacts;
m_contacts.emplaceBack(new Contact("", ""));
m_contacts.emplaceBack(new Contact("", ""));
m_contacts.emplaceBack(new Contact("", ""));
m_contacts.emplaceBack(new Contact("", ""));
第二行的 emplaceBack() 报错 原因如下:
代码语言:javascript代码运行次数:0运行复制在给定的代码中,第二行 m_contacts.emplaceBack(); 报错的原因是 std::unique_ptr 对象不能直接通过 emplace_back() 函数插入到 QList 容器中。 std::unique_ptr 是一个独占所有权的智能指针,它不支持拷贝操作,只能通过移动语义来转移所有权。而 QList 是一个基于值语义的容器,要求存储的元素类型必须支持拷贝构造和拷贝赋值操作。 解决此问题的一种方法是将 std::unique_ptr 包装在一个额外的类中,该类支持拷贝操作,并将该类的对象存储在 QList 中。例如,可以创建一个自定义的包装类 UniqueConcatWrapper,如下所示:
struct UniqueConcatWrapper {
QSharedPointer<Contact> ptr;
UniqueConcatWrapper(QSharedPointer<Contact> ptr) : ptr(ptr) {}
};
class ContactView : public QListView {
QList<UniqueConcatWrapper> m_contacts;
};
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-01-08,如有侵权请联系 cloudcommunity@tencent 删除stduniqueqt容器contacts本文标签: Qt QList<stdunique
版权声明:本文标题:Qt QList<std::unique 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754596554a1704190.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论