Namespaces
Variants

std::type_info:: name

From cppreference.net
Utilities library
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)