为什么 Qt 的 qHash() 没有 std::shared_ptr 的重载?

Why doesn't Qt's qHash() have an overload for std::shared_ptr?

我刚刚发现,令我惊讶的是,以下代码在使用 Qt 5.4 的 C++14 中无法立即编译:

QSet<std::shared_ptr<SomeType>> var;

问题是 std::shared_ptrqHash() 方法没有重载,或者据我所知任何其他智能指针: http://doc.qt.io/qt-5/qhash.html#related-non-members

对我来说,有以下重载(或类似的东西)似乎很自然:

template <typename T>
uint qHash(const std::shared_ptr<T>& ptr, uint seed = 0)
{
    return qHash(ptr.get(), seed);
}

但它不存在。这不能只是 Qt 开发人员忽略的事情。我需要包含一个特殊的 header 吗?这不存在的原因是什么?

This cannot simply be something the Qt developers overlooked.

它是,而且它不是被忽视的东西 - 一次编写所有代码是不可能的。一个人必须在某个地方停下来做一个释放。请随意提交将解决此问题的代码修订 :) 不过,请确保修订将在所有平台上构建,并使用所有支持的编译器 - 其中一些具有没有 std::shared_ptr!

的库

说到魔鬼,果然出现了: https://codereview.qt-project.org/113340

This cannot simply be something the Qt developers overlooked.

这不是一个忽视,只是 Qt 没有无穷无尽的资源来向任何具有 operator==.

的 STL 类型添加 qHash 重载