std::type_info:: name
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
| Member functions | ||||
|
(until C++20)
|
||||
|
(C++11)
|
||||
|
type_info::name
|
|
const
char
*
name
(
)
const
;
|
(noexcept seit C++11) | |
Gibt einen implementierungsdefinierten nullterminierten Zeichenstring zurück, der den Namen des Typs enthält. Es werden keine Garantien gegeben; insbesondere kann der zurückgegebene String für mehrere Typen identisch sein und sich zwischen verschiedenen Aufrufen desselben Programms ändern.
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
Null-terminierte Zeichenkette die den Namen des Typs enthält.
Hinweise
Die Lebensdauer des Arrays, auf das der zurückgegebene Zeiger zeigt, ist nicht spezifiziert, aber in der Praxis besteht es so lange fort wie die RTTI-Datenstruktur für den gegebenen Typ existiert, welche die Anwendungslebensdauer hat, sofern sie nicht aus einer dynamischen Bibliothek geladen wurde (die entladen werden kann).
Einige Implementierungen (wie MSVC, IBM, Oracle) erzeugen einen menschenlesbaren Typnamen. Andere, insbesondere gcc und clang, geben den gemangten Namen zurück, der durch den
Itanium C++ ABI
spezifiziert ist. Der gemangelte 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 Kommandozeilenwerkzeug
c
++
filt
-
t
gepiped werden.
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
Siehe auch
|
(C++11)
|
gibt einen Wert zurück, der für dieselben Typen identisch ist
(öffentliche Elementfunktion) |