2015-05-29 31 views
1

我才发现,我的意料,下面的代码不编译开箱即用C++中使用Qt的14 5.4:为什么Qt的qHash()对std :: shared_ptr有重载?

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

的问题是,有没有qHash()方法的重载对于std::shared_ptr,或就任何其他智能指针,我可以看到: 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开发者忽略的东西。我需要包含一个特殊的标题吗?这不存在的原因是什么?

+0

为什么要混合Qt的set类和std的智能指针类有什么好的理由?为什么不'std :: unordered_set'? – MSalters

回答

2

魔鬼的说话,他凸现出现: https://codereview.qt-project.org/113340

这不能简单地将东西Qt开发人员忽视。

这不是一个俯瞰,它只是Qt不有无尽的资源qHash重载添加到它有一个operator==任何STL类型。

+0

非常感谢@peppe。您是否将这些重载添加到Qt中?非常感谢:) –

+0

就是说,即使Qt资源有限,其光泽和成熟度,以及完美的迷人程度,也会让我期待一切(几乎总是:D)。 –

1

这不能简单地成为Qt开发者忽略的东西。

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

相关问题