type_info, classe
La classe type_info décrit les informations de type générées à l'intérieur du programme par le compilateur. Les objets de cette classe stockent efficacement un pointeur dans un nom pour le type. La classe type_info stocke également une valeur encodée appropriée pour comparer deux types afin de connaître l'égalité ou l'ordre de classement. Les règles d'encodage et la séquence de classement pour les types ne sont pas spécifiées et peuvent différer entre les programmes.
Le fichier d'en-tête <typeinfo> doit être inclus afin d'utiliser la classe type_info. L'interface pour la classe type_info est :
class type_info {
public:
virtual ~type_info();
size_t hash_code() const
_CRTIMP_PURE bool operator==(const type_info& rhs) const;
_CRTIMP_PURE bool operator!=(const type_info& rhs) const;
_CRTIMP_PURE int before(const type_info& rhs) const;
_CRTIMP_PURE const char* name() const;
_CRTIMP_PURE const char* raw_name() const;
};
Vous ne pouvez pas instancier des objets de la classe type_info directement, car la classe a un seul constructeur de copie privé. La seule façon de construire un objet type_info (temporaire) consiste à utiliser l'opérateur typeid. Comme l'opérateur d'assignation est également privé, vous ne pouvez pas copier ou assigner des objets de classe type_info.
type_info::hash_code définit une fonction de hachage appropriée pour mapper des valeurs de type typeinfo pour une distribution des valeurs d'index.
Les opérateurs == et != peuvent être utilisés pour comparer l'égalité et l'inégalité avec d'autres objets type_info, respectivement.
Il n'existe aucun lien entre l'ordre de classement des types et les relations d'héritage. Utilisez la fonction membre type_info::before pour déterminer la séquence de classement des types. Il n'existe aucune garantie que type_info::before génère le même résultat dans des programmes différents ou même différentes exécutions du même programme. Ainsi, type_info::before est similaire à l'opérateur address-of (&).
La fonction membre type_info::name retourne const char* à une chaîne terminée par le caractère NULL représentant le nom explicite du type. La mémoire désignée est mise en cache et ne doit jamais être directement libérée.
La fonction membre type_info::raw_name retourne const char* à une chaîne terminée par le caractère NULL représentant le nom décoré du type d'objet. Le nom est réellement stocké sous sa forme décorée pour économiser de l'espace. Par conséquent, cette fonction est plus rapide que type_info::name car elle n'a pas besoin de supprimer la décoration du nom. La chaîne retournée par la fonction type_info::raw_name est utile dans les opérations de comparaison mais n'est pas lisible. Si vous avez besoin d'une chaîne explicite, utilisez la fonction type_info::name à la place.
Les informations de type sont générées pour les classes polymorphes uniquement si l'option du compilateur /GR (Activer les informations de type au moment de l'exécution) est spécifiée.