std::type_info::hash_code
std::size_t hash_code() const noexcept;
|
(depuis C++11) | |
Retourne une valeur non spécifiée (désignée ici par code de hachage) telle que pour tous les objets std::type_info faisant référence au même type, leur code de hachage soit identique.
Aucune autre garantie n'est fournie : des objets std::type_info faisant référence à des types différents peuvent avoir le même code de hachage (bien que la norme recommande aux implémentations d'éviter cela autant que possible), et le code de hachage pour un même type peut changer entre différentes exécutions du même programme.
Paramètres
(aucun)
Valeur de retour
Une valeur identique pour tous les std::type_info objets faisant référence au même type.
Exemple
Le programme suivant est un exemple de mappage efficace type-valeur sans utiliser std::type_index .
#include <functional> #include <iostream> #include <memory> #include <string> #include <typeinfo> #include <unordered_map> struct A { virtual ~A() {} }; struct B : A {}; struct C : A {}; using TypeInfoRef = std::reference_wrapper<const std::type_info>; struct Hasher { std::size_t operator()(TypeInfoRef code) const { return code.get().hash_code(); } }; struct EqualTo { bool operator()(TypeInfoRef lhs, TypeInfoRef rhs) const { return lhs.get() == rhs.get(); } }; int main() { std::unordered_map<TypeInfoRef, std::string, Hasher, EqualTo> type_names; type_names[typeid(int)] = "int"; type_names[typeid(double)] = "double"; type_names[typeid(A)] = "A"; type_names[typeid(B)] = "B"; type_names[typeid(C)] = "C"; int i; double d; A a; // note that we're storing pointer to type A std::unique_ptr<A> b(new B); std::unique_ptr<A> c(new C); std::cout << "i is " << type_names[typeid(i)] << '\n'; std::cout << "d is " << type_names[typeid(d)] << '\n'; std::cout << "a is " << type_names[typeid(a)] << '\n'; std::cout << "*b is " << type_names[typeid(*b)] << '\n'; std::cout << "*c is " << type_names[typeid(*c)] << '\n'; }
Sortie :
i is int d is double a is A *b is B *c is C
Voir aussi
|
(removed in C++20)
|
vérifie si les objets font référence au même type
(fonction membre publique) |
|
nom défini par l'implémentation du type
(fonction membre publique) |