std::type_index
Von cppreference.com
| Definiert in Header <typeindex> |
||
| class type_index; |
(seit C++11) | |
Die type_index-Klasse ist eine Wrapper-Klasse um ein std::type_info-Objekt, das als Index in assoziativen und nicht-assoziativen Containern verwendet werden kann. Die Beziehung zum type_info-Objekt wird über einen Zeiger aufrechterhalten, daher ist type_index CopyConstructible und CopyAssignable.
Inhalt |
[bearbeiten] Member-Funktionen
| konstruiert das Objekt (public member function) | |
| (Destruktor) (implizit deklariert) |
zerstört das type_index-Objekt(öffentliche Memberfunktion) |
| operator= (implizit deklariert) |
weist ein type_index-Objekt zu(öffentliche Memberfunktion) |
| (entfernt in C++20)(C++20) |
vergleicht die zugrunde liegenden std::type_info-Objekte (public member function) |
| gibt den gehashten Code zurück (public member function) | |
| gibt den implementierungsdefinierten Namen des Typs zurück, der mit dem zugrunde liegenden type_info-Objekt assoziiert ist (public member function) |
[bearbeiten] Hilfsklassen
| (C++11) |
Hash-Unterstützung für std::type_index (Klassentemplate-Spezialisierung) |
[bearbeiten] Beispiel
Das folgende Programm ist ein Beispiel für eine effiziente Typ-Wert-Zuordnung.
Führen Sie diesen Code aus
#include <iostream> #include <memory> #include <string> #include <typeindex> #include <typeinfo> #include <unordered_map> struct A { virtual ~A() {} }; struct B : A {}; struct C : A {}; int main() { std::unordered_map<std::type_index, std::string> type_names; type_names[std::type_index(typeid(int))] = "int"; type_names[std::type_index(typeid(double))] = "double"; type_names[std::type_index(typeid(A))] = "A"; type_names[std::type_index(typeid(B))] = "B"; type_names[std::type_index(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[std::type_index(typeid(i))] << '\n'; std::cout << "d is " << type_names[std::type_index(typeid(d))] << '\n'; std::cout << "a is " << type_names[std::type_index(typeid(a))] << '\n'; std::cout << "*b is " << type_names[std::type_index(typeid(*b))] << '\n'; std::cout << "*c is " << type_names[std::type_index(typeid(*c))] << '\n'; }
Ausgabe
i is int d is double a is A *b is B *c is C
[bearbeiten] Siehe auch
| enthält Informationen über bestimmte Typen, die Klasse, die vom typeid-Operator zurückgegeben wird (Klasse) |