0
我有類網關。 我需要將這個類的對象存儲在一個哈希表中(使用tr1 :: unordered_set)。 我用兩個unorderd_set和另一個上下文類網關和他們的工作很好,但我不明白如何把一個網關的無序集,因爲我不能在TR1的命名空間中定義其hash
功能。在tr1中爲模板類定義哈希值
我試過:(和許多其他變種)
namespace std {
namespace tr1 {
template<> <typename T> inline size_t hash<(typename Gateway<T>)>::operator()(Gateway<T> gT) const {
return gT.getCore()->hash(); //!DOESN't WORK
}
}
編譯器說,這(typename Gateway<T>
)是錯誤的。如果我走()
斷,它假定在hash<typename Gateway<T>>()
到底>>
是輸出流。
而在過去,我已經做到了這一點
namespace std {
namespace tr1 {
template<> inline size_t hash<Board>::operator()(Board b) const {
return b.hash(); //!WORKS FINE
}
}
}
任何人都可以擺脫對這個問題的一些輕?
更新
感謝您的回答卻還是有問題的編譯器說,非法使用不完全類型的struct std::tr1::hash<>
當我們使用類沒有其完整的定義,這種錯誤的發生,但該類在聲明之前已完全定義。我已經在沒有問題的情況下以非常類似的方式使用了這個模板。
`散列<類型名稱網關>()`需要`>`字符之間的空間。 C++ 0x修復了這個 –
KitsuneYMG
2011-01-24 05:21:28