Die Boost-Bibliothek bietet eine Komfortfunktion hash_value
, die im Grunde nur aufgerufen wird:
Soweit ich das sehen kann, enthielt C ++ 11 std::hash
, was sehr ähnlich zu boost::hash
ist, aber nicht std::hash_value
. Dies erfordert einen Anwendungscode, um ein hash
-Objekt zu erstellen und es als operator()
aufzurufen, anstatt nur eine bequeme Funktion aufzurufen. Gibt es einen Grund, dass std::hash_value
nicht standardisiert wurde?
Die primäre Verwendung der Funktion std::hash<T>
ist das Objekt, das zum Abrufen eines Hashwerts von einem Schlüssel in der Containergruppe std::unordered_*
verwendet wird. Diese werden immer ein entsprechendes Objekt enthalten und verwenden, möglicherweise unter Verwendung der leeren Basisoptimierung, um zu vermeiden, dass es irgendeinen Speicher belegt. Immer wenn der std::hash<T>
-Typ verwendet wird, ist tatsächlich ein Objekt vorhanden.
Obwohl das Funktionsobjekt eigenständig verwendet werden kann, ist es wahrscheinlich selten. Auch für andere, ähnliche existierende Funktionsobjekte gibt es keine entsprechenden Komfort-Aufruffunktionen: obwohl die meisten von ihnen Wrapper für Operatoren sind, könnte std::less<void*>
interessant sein, Stand-Alone aufzurufen, da Sie ptr1 < ptr2
(mindestens , es könnte nicht in C ++ 03 verwendet werden, wenn ptr1
und ptr2
nicht Teil desselben Array-Objekts sind). Das heißt, es gab keinen geeigneten Vorrang.
Schließlich würde ich annehmen, dass die Bequemlichkeitsfunktion einfach nicht Teil des Vorschlags war: Wenn sie nicht vorgeschlagen wird und es keinen wirklich guten Fall gibt, wird nichts in den C ++ - Standard aufgenommen. Wie es aussieht, scheint n1456 zumindest zu sein , eine Revision des Vorschlags "Hashtabelle" und keine Spur von std::hash_value<T>()
.