std::hash
-
Hallo
ich habe eine eigene Klassen, die ich in einem HashSet speichern will.
dafür brauch ich eine eigene hash-funktion.
ich dachte man spezialisiert einfach die std::hash.
also so:template<> struct std::hash<MeineKlasse> { size_t operator()(const T& value) { std::hash<str::string> strhash; return strhash(T.getName()); } }
leider funkt mir dann der compliter: "E2299 Cannot generate template specialization from 'specifier'"
specifier ist dann die std::hash.
wieso gehtn das nicht? oder ist das nur wegen dem BorlandCB++6.0 compiler?
-
Du solltest zumindest das ganze im namespace std machen und nicht std:: spezifizieren:
namespace std { template ... }
-
irgendwie versteh ich template-spezialisierung nicht so ganz.
wenn ich so eine Klasse habe:template <class T> class MeineKlasse { std::string getName() const; // irgendwas };
und jetzt will ich diese klasse in einem HashSet speichern.
wie spezialisiere ich die std::hash ?
kann mir einer bitte helfen, ich habe nämlich probleme das die klasse auch eine template ist.
-
DEvent schrieb:
Hallo
template<> struct std::hash<MeineKlasse> { size_t operator()(const T& value) //<---- sollte da nicht MeineKlasse stehen ? { std::hash<str::string> strhash; return strhash(T.getName()); } }
-
Hallo,
da MeineKlasse ein Template ist, muss du std::hash entweder partiell spezialisieren oder aber explizit für eine konkrete Instanz von MeineKlasse.
Dastemplate<> struct std::hash<MeineKlasse> {...}
hingegen kann natürlich nicht funktionieren.