class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
Por encima de código imprime P3foo en mi máquina ubuntu con g ++. No entiendo por qué está imprimiendo P3foo en lugar de solo foo. Si cambio el código comotypeid() devuelve caracteres adicionales en g ++
std::cout << typeid(*this).name() << std::endl;
imprime 3foo.
¿Alguna idea?
¡WOW! Interesante. Dos preguntas más ... 1 - C++ filt es parte de la distribución de gcc o parte de LINUX? 2 - ¿Hay alguna forma de obtener el nombre destrozado de un método o clase? –
C++ filt es parte de binutils (el paquete donde también vienen ld (el enlazador) y las otras utilidades pequeñas como readelf): http://www.gnu.org/software/binutils/ –
no hay forma de hacer eso en C++. En GCC, sin embargo, hay una función expuesta por el ABI que sí lo hace. Está en cxxabi.h y se llama __cxa_demangle. solo pásalo por el nombre destrozado. Su interfaz sigue este ABI: http://www.codesourcery.com/public/cxx-abi/abi.html#demangler –