Freigeben über


type_info-Klasse

Die type_info-Klasse beschreibt die Typinformationen, die innerhalb des Programms vom Compiler generiert werden. Objekte dieser Klasse speichern effektiv einen Zeiger auf einen Namen für den Typ. Die type_info-Klasse speichert auch einen codierten Wert, der zum Vergleichen von zwei Typen im Hinblick auf die Gleichheit oder Sortierreihenfolge dient. Die Codierungsregeln und die Sortierreihenfolge für Typen sind nicht spezifiziert und können je nach Programm unterschiedlich sein.

Um die type_info-Klasse zu verwenden, muss die <typeinfo>-Headerdatei enthalten sein. Die Schnittstelle für die type_info-Klasse ist wie folgt:

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;
};

Sie können Objekte der type_info-Klasse nicht direkt instanziieren, da die Klasse nur einen privaten Kopierkonstruktor hat. Ein (temporäres) type_info-Objekt kann nur unter Verwendung des typeid-Operators erstellt werden. Da der Zuweisungsoperator auch privat ist, können Sie Objekte der type_info-Klasse nicht kopieren oder zuweisen.

type_info::hash_code definiert eine Hashfunktion, die geeignet ist, Werte des typeinfo-Typs einer Verteilung von Indexwerten zuzuordnen.

Die Operatoren == und != können verwendet werden, um die Gleichheit bzw. Ungleichheit mit anderen type_info-Objekten zu bestimmen.

Es gibt keine Verbindung zwischen der Sortierreihenfolge von Typen und Vererbungsbeziehungen. Verwenden Sie die type_info::before-Memberfunktion, um die Sortierreihenfolge von Typen zu ermitteln. Es gibt keine Garantie, dass type_info::before in verschiedenen Programmen oder sogar bei unterschiedlichen Ausführungen desselben Programms zum gleichen Ergebnis führt. In dieser Hinsicht entspricht type_info::before dem address-of-Operator (&).

Die type_info::name-Memberfunktion gibt const char* an eine auf NULL endende Zeichenfolge zurück, die den lesbaren Namen des Typs darstellt. Der Speicher, auf den gezeigt wird, wird zwischengespeichert und sollte nie direkt freigegeben werden.

Die type_info::raw_name-Memberfunktion gibt const char* an eine auf NULL endende Zeichenfolge zurück, die den ergänzten Namen des Objekttyps darstellt. Der Name wird tatsächlich in seiner ergänzten Form gespeichert, um Platz zu sparen. Daher ist diese Funktion schneller als type_info::name, da sie die Namensergänzung nicht rückgängig machen muss. Die Zeichenfolge, die durch die type_info::raw_name-Funktion zurückgegeben wird, ist nützlich für Vergleichsvorgänge, aber nicht lesbar. Wenn Sie eine lesbare Zeichenfolge benötigen, verwenden Sie stattdessen die Funktion type_info::name.

Typinformationen werden für polymorphe Klassen nur generiert, wenn die Compileroption /GR (Laufzeit-Typeninformation aktivieren) angegeben wird.

Siehe auch

Referenz

Laufzeit-Typinformationen