En C++, cuando usamos typeid
para obtener el nombre de tipo de un objeto o clase, se mostrará una cadena decorada (mutilada). Yo uso cxxabi
a demangle que:Eliminando espacio de nombre de tipo en C++
#include <cxxabi.h>
#include <typeinfo>
namespace MyNamespace {
class MyBaseClass
{
public:
const std::string name()
{
int status;
char *realname = abi::__cxa_demangle(typeid (*this).name(),0,0, &status);
std::string n = realname;
free(realname);
return n;
}
};
}
int main()
{
MyNamespace::MyBaseClass h;
std::cout << h.name() << std::endl;
}
La salida de gcc
es:
MyNamespace :: MyBaseClass
Necesito quitar MyNamespace::
de cadena anterior.
puedo eliminarlos mediante la manipulación de cadena
.
Pero
hay una manera estándar con cxxabi
u otras bibliotecas para hacer esto o una solución clara? (Por lo menos portátil entre gcc y Visual C++)
+1, pregunta informativa. – iammilind
IIRC sería legal que una implementación compatible simplemente devuelva la misma cadena (por ejemplo, "godzilla") para cualquier clase. – 6502
Puede utilizar diferentes convenciones de nomenclatura para clases y espacios de nombres, para que pueda ver inmediatamente cuál es el que está en 'X :: Y :: Z :: MyType'. –