1

令我惊讶的是,我刚刚发现以下代码在使用 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 开发人员忽略的事情。我需要包含一个特殊的标题吗?这不存在的原因是什么?

4

2 回答 2

2

说到魔鬼,他确实出现了: https ://codereview.qt-project.org/113340

这不能简单地是 Qt 开发人员忽略的事情。

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

于 2015-05-29T17:14:14.713 回答
1

这不能简单地是 Qt 开发人员忽略的事情。

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

于 2015-05-29T15:17:43.907 回答