std::type_info::name
const char* name() const; |
(noexcept seit C++11) | |
Gibt eine implementierungsdefinierte, nullterminierte Zeichenkette zurück, die den Namen des Typs enthält. Es gibt keine Garantien; insbesondere kann die zurückgegebene Zeichenkette für verschiedene Typen identisch sein und sich zwischen Aufrufen desselben Programms ändern.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
Nullterminierte Zeichenkette, die den Namen des Typs enthält.
[bearbeiten] Hinweise
Die Lebensdauer des Arrays, auf das der zurückgegebene Zeiger zeigt, ist nicht spezifiziert. In der Praxis bleibt es jedoch so lange bestehen, wie die RTTI-Datenstruktur für den gegebenen Typ existiert, was die Lebensdauer der Anwendung hat, es sei denn, sie wird aus einer dynamischen Bibliothek geladen (die entladen werden kann).
Einige Implementierungen (wie MSVC, IBM, Oracle) erzeugen einen menschenlesbaren Typnamen. Andere, insbesondere gcc und clang, geben den mangled name zurück, der durch die Itanium C++ ABI spezifiziert ist. Der mangled name kann mit implementierungsspezifischen APIs wie abi::__cxa_demangle direkt oder über boost::core::demangle in eine menschenlesbare Form umgewandelt werden. Er kann auch durch das Kommandozeilen-Dienstprogramm c++filt -t geleitet werden.
[bearbeiten] Beispiel
#include <boost/core/demangle.hpp> #include <cstdlib> #include <iostream> #include <string> #include <typeinfo> struct Base { virtual ~Base() = default; }; struct Derived : Base {}; int main() { Base b1; Derived d1; const Base* pb = &b1; std::cout << typeid(*pb).name() << '\n'; pb = &d1; std::cout << typeid(*pb).name() << '\n'; std::string real_name = boost::core::demangle(typeid(pb).name()); std::cout << typeid(pb).name() << " => " << real_name << '\n'; std::cout << "c++filt => " << std::flush; std::string s = typeid(pb).name(); std::system(("c++filt -t " + s).data()); }
Mögliche Ausgabe
// GCC/Clang: 4Base 7Derived PK4Base => Base const* c++filt => Base const* // MSVC: struct Base struct Derived struct Base const * __ptr64 => struct Base const * __ptr64
[bearbeiten] Siehe auch
| (C++11) |
gibt einen Wert zurück, der für denselben Typ identisch ist (public member function) |