Namespaces
Variants

std::type_info:: name

From cppreference.net
Utilities library
const char * name ( ) const ;
(noexcept desde C++11)

Retorna una cadena de caracteres terminada en nulo definida por la implementación que contiene el nombre del tipo. No se ofrecen garantías; en particular, la cadena retornada puede ser idéntica para varios tipos y cambiar entre invocaciones del mismo programa.

Contenidos

Parámetros

(ninguno)

Valor de retorno

Cadena de caracteres terminada en nulo que contiene el nombre del tipo.

Notas

La duración del array apuntado por el puntero devuelto no está especificada, pero en la práctica persiste mientras exista la estructura de datos RTTI para el tipo dado, que tiene la duración de la aplicación a menos que se cargue desde una biblioteca dinámica (que puede ser descargada).

Algunas implementaciones (como MSVC, IBM, Oracle) producen un nombre de tipo legible para humanos. Otras, notablemente gcc y clang, retornan el nombre codificado (mangled), que está especificado por el Itanium C++ ABI . El nombre codificado puede convertirse a formato legible usando APIs específicas de implementación como abi::__cxa_demangle directamente o a través de boost::core::demangle . También puede procesarse mediante la utilidad de línea de comandos c ++ filt - t .

Ejemplo

#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());
}

Salida posible:

// GCC/Clang:
4Base
7Derived
PK4Base => Base const*
c++filt => Base const*
// MSVC:
struct Base
struct Derived
struct Base const * __ptr64 => struct Base const * __ptr64

Véase también

(C++11)
devuelve un valor que es idéntico para los mismos tipos
(función miembro pública)