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 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) |