令我惊讶的是,我发现以下代码不能使用Qt 5.4在C ++ 14中开箱即用:
QSet<std::shared_ptr<SomeType>> var;
问题是qHash()
的{{1}}方法或任何其他智能指针都没有超载,据我所知:
http://doc.qt.io/qt-5/qhash.html#related-non-members
对我来说,拥有以下重载(或类似的东西)似乎很自然:
std::shared_ptr
但它不存在。这不仅仅是Qt开发人员忽视的问题。我需要包含特殊标题吗?这不存在的原因是什么?
答案 0 :(得分:2)
说出魔鬼,他出现了: https://codereview.qt-project.org/113340
这不仅仅是Qt开发人员忽视的问题。
这不是一个忽视,它只是Qt没有无限的资源来为任何具有qHash
的STL类型添加operator==
重载。< / p>
答案 1 :(得分:1)
这不仅仅是Qt开发人员忽视的问题。
它是,并且它不是被忽视的东西 - 根本不可能立刻编写所有代码。一个人必须停在某个地方并做一个释放。随意提交将修复此问题的代码修订版:)尽管如此,请确保修订版将在所有平台上构建,并且所有支持的编译器都有 - 其中一些版本的库没有std::shared_ptr
!