令我惊讶的是,我刚刚发现以下代码在使用 Qt 5.4 的 C++14 中无法立即编译:
QSet<std::shared_ptr<SomeType>> var;
问题是,就我所见,
没有qHash()
方法或任何其他智能指针的重载:http: //doc.qt.io/qt-5/qhash.html#related-non-membersstd::shared_ptr
对我来说,有以下重载(或类似的东西)似乎很自然:
template <typename T>
uint qHash(const std::shared_ptr<T>& ptr, uint seed = 0)
{
return qHash(ptr.get(), seed);
}
但它不存在。这不能简单地是 Qt 开发人员忽略的事情。我需要包含一个特殊的标题吗?这不存在的原因是什么?