type_info-Klasse
Die type_information-Klasse beschreibt die Typinformationen, die innerhalb des Programms vom Compiler generiert werden.Objekte dieser Klasse effizienter speichern einen Zeiger auf einen Namen für den Typ.Die type_information-Klasse enthält auch einen codierten Wert, der zum Vergleichen von zwei Typen für Gleichheit oder Sortierreihenfolge geeignet ist.Die Codierungsregeln und Sortierreihenfolge für Typen sind nicht angegeben und unterscheiden sich zwischen Programme.
Die Headerdatei <typeinfo> muss enthalten sein, um die type_information-Klasse zu verwenden.Die Schnittstelle für die type_information-Klasse ist:
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_information-Klasse nicht direkt instanziiert werden, da die Klasse nur über einen privaten Kopierkonstruktor verfügt.Die einzige Möglichkeit, ein ( type_information ) temporäres Objekt zum Erstellen typeid den Operator zu verwenden.Da der Zuweisungsoperator auch privat ist, können Sie auf Objekte der Klasse type_informationnicht kopieren oder zuweisen.
type_information::hash_code definiert eine Hashfunktion, die für die Zuordnung von Werten des Typs typeinfo für eine Verteilung von Indexwerten geeignet ist.
Die Operatoren == und != können verwendet werden, um auf Gleichheit und Ungleichheit mit anderen type_information-Objekte verglichen werden soll.
Es gibt keinen Link zwischen der Sortierreihenfolge von Typen und Vererbungs-Verhältnissen.Verwenden Sie die type_information::zuvor-Memberfunktion, um die Sortierreihenfolge von Typen zu bestimmen.Es gibt keine Garantie dafür, dass type_information::zuvor das gleiche Ergebnis in anderen Programmen oder sogar in verschiedenen Ausführungen desselben Programms führt.Auf diese Weise ist type_information::zuvor zu ADDRESS-von Operator ()-ähnlich.
Die type_information::Name-Memberfunktion gibt const char* auf eine auf NULL endende Zeichenfolge zurück, die den lesbaren Namen des Typs darstellt.Der Speicherplatz, der angezeigt wird, wird zwischengespeichert und sollte nicht direkt verwendet werden.
Die type_information::raw_name-Memberfunktion gibt const char* auf eine auf NULL endende Zeichenfolge zurück, die den ergänzten Namen des Objekttyps darstellt.Der Name ist tatsächlich in seiner ergänzten Form gespeichert, um Platz zu sparen.Daher ist diese Funktion schneller als type_information::Name , da sie nicht um den Namen der Ergänzung rückgängig zu machen.Die Zeichenfolge, die von der type_information::raw_name-Funktion zurückgegeben wird, ist aber Vorgänge im Vergleich von nützlichen kann nicht gelesen werden.Wenn Sie eine lesbare Zeichenfolge benötigen, verwenden Sie stattdessen die type_information::Name-Funktion.
Es werden Typinformationen für polymorphe Klassen generiert nur dann, wenn die /GR (Enable Laufzeit-Typeninformation)-Compileroption angegeben wird.