Wie kann ich der STL-Implementierung erlauben, meine benutzerdefinierten Typen aufzunehmen? Auf MSVC gibt es eine Klasse std::tr1::hash
, die ich unter VerwendungWie std :: tr1 :: Hash für benutzerdefinierte Typen zu erweitern?
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
teilweise spezialisieren können, aber das ist der empfohlene Weg? Funktioniert das auch mit der Implementierung von GCC? Für boost::hash
reicht es, eine freie Funktion size_t hash_value (const MyType&)
bereitzustellen, gibt es etwas Ähnliches für die TR1-Implementierung?
Gibt es eine Möglichkeit, std :: hash für benutzerdefinierte Typen mit privaten Kopie Konstruktoren zu erweitern? Gibt es auch eine Möglichkeit, es mit einem Operator() zu erweitern, der anstelle von val einen konstanten Wert annimmt? –
Was ist das Problem mit der Template-Spezialisierung? Sie nehmen keine Kopie Ihres Objekts (Sie übergeben es durch Referenzen), also kein Problem - und der Operator() nimmt eine Konstante ref oder Wert, was auch immer Sie wollen. Sehen Sie sich Phil Nashs Antwort an, die das Objekt als const ref. – Anteru