RTTI in C++
main.cpp
#include <iostream>
#include <ostream>
#include <typeinfo>int main()
{ ::std::cout << typeid( 1 ).name() << '\n';
::std::cout << typeid( 1.1 ).name() << '\n';
::std::cout << typeid( 1.1f ).name() << '\n';
::std::cout << typeid( 1u ).name() << '\n'; }transcript
i
d
f
j
Der zurückgegebene Name ist implementationsspezifisch. (Eine Implementation ist nicht einmal verpflichtet, überhaupt unterschiedliche Namen für unterschiedliche Typen zu ergeben.)
GNU C++ compiler
Die Funktion »::abi::__cxa_demangle« findet sich nur unter wenigen Implementation, wie beispielsweise dem GNU C++ compiler .
main.cpp
#include <cxxabi.h>
#include <iostream>
#include <ostream>
#include <typeinfo>static const char * decode( const char * const typnam )
{ static char buf[ 9999 ]; size_t size = sizeof( buf ); int st;
char const * const result = ::abi::__cxa_demangle( typnam, buf, &size, &st );
buf[ size - 1 ]= 0; return result; }int main()
{ ::std::cout << decode( typeid( 1 ).name() )<< '\n';
::std::cout << decode( typeid( 1.1 ).name() )<< '\n';
::std::cout << decode( typeid( 1.1f ).name() )<< '\n';
::std::cout << decode( typeid( 1u ).name() )<< '\n'; }transcript
int
double
float
unsigned int