type_info-Klasse

Die type_info Klasse beschreibt Typinformationen, die vom Compiler innerhalb des Programms 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 für Gleichheit oder Sortierreihenfolge geeignet ist. Die Codierungsregeln und die Sortierreihenfolge für Typen sind nicht spezifiziert und können je nach Programm unterschiedlich sein.

Die <typeinfo> Headerdatei muss eingeschlossen werden, um die type_info Klasse zu verwenden. Die Schnittstelle für die type_info-Klasse lautet:

class type_info {
public:
    type_info(const type_info& rhs) = delete; // cannot be copied
    virtual ~type_info();
    size_t hash_code() const;
    _CRTIMP_PURE bool operator==(const type_info& rhs) const;
    type_info& operator=(const type_info& rhs) = delete; // cannot be copied
    _CRTIMP_PURE bool operator!=(const type_info& rhs) const;
    _CRTIMP_PURE int before(const type_info& rhs) const;
    size_t hash_code() const noexcept;
    _CRTIMP_PURE const char* name() const;
    _CRTIMP_PURE const char* raw_name() const;
};

Objekte der type_info Klasse können nicht direkt instanziiert werden, da die Klasse nur über einen privaten Kopierkonstruktor verfügt. Die einzige Möglichkeit zum Erstellen eines (temporären) type_info Objekts besteht darin, den Typeid-Operator zu verwenden. Da der Zuordnungsoperator auch privat ist, können Sie keine Objekte der Klasse type_info kopieren oder zuweisen.

type_info::hash_codedefiniert eine Hashfunktion, die für die Zuordnung von Werten vom Typtypinfo zu einer Verteilung von Indexwerten geeignet ist.

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

Es gibt keine Verbindung zwischen der Sortierreihenfolge von Typen und Vererbungsbeziehungen. Verwenden Sie die type_info::before Memberfunktion, um die Sortierreihenfolge von Typen zu bestimmen. Es gibt keine Garantie dafür, dass type_info::before dasselbe Ergebnis in verschiedenen Programmen oder sogar unterschiedlichen Läufen desselben Programms erzielt wird. Auf diese Weise type_info::before ähnelt die Adresse des (&) Operators.

Die type_info::name Memberfunktion gibt eine const char* Zeichenfolge mit Null-Beendigung 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 ist microsoftspezifisch. Sie gibt eine const char* Zeichenfolge mit Null-Beendigung zurück, die den verzierten Namen des Objekttyps darstellt. Der Name wird in seiner eingerichteten Form gespeichert, um Platz zu sparen. Folglich ist diese Funktion schneller, als type_info::name weil sie den Namen nicht rückgängig machen muss. Die von der type_info::raw_name Funktion zurückgegebene Zeichenfolge ist in Vergleichsvorgängen nützlich, ist aber nicht lesbar. Wenn Sie stattdessen eine lesbare Zeichenfolge benötigen, verwenden Sie type_info::name diese.

Typinformationen werden nur für polymorphe Klassen generiert, wenn die Compileroption /GR (Laufzeittypinformationen aktivieren) angegeben ist.

Siehe auch

Laufzeit-Typinformationen