2015-05-29 27 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

相關問題