typeid del método estático
Frecuentes
Visto 932 veces
2
Aquí tengo el siguiente problema: escribo (refactorizo) un registrador y estoy tratando de usar el mecanismo de identificación de tipo de tiempo de ejecución de C++, específicamente typeid
para obtener la información de tipo de tiempo de ejecución de la clase que acaba de llamar al registrador. Esto entra en una macro como:
#define debug() Streamer(__FILE__, __FUNCTION__, typeid(this).name(), LOG_DEBUG)
donde Streamer es una clase que sobrecarga el operator <<
para obtener las funciones de transmisión requeridas, como debug() << "message " << 16;
etc ...
El único problema es cuando llamo al debug()
macro de una función estática. porque entonces el typeid(this)
se vuelve loco y se queja muy correctamente de que un método estático no tiene this
.
Me gustaría escuchar su opinión y tal vez algunos fragmentos de código sobre cómo obtener la clase como una cadena que contiene el método estático que intenta iniciar sesión.
Saludos, F.
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ static-methods rtti typeid or haz tu propia pregunta.
Tampoco puede usar esa macro en funciones fuera de las clases, por ejemplo
main
. - Some programmer dudeesta también es una observación correcta :( Merece +1 - Ferenc Deak
Si usa gcc, puede extraer el tipo de
__PRETTY_FUNCTION__
. Es posible que no pueda crear macros genéricas que funcionen en ambos tipos de métodos. - ArpegiusFWIW: la salida de
typeid(x).name()
no siempre es muy legible de todos modos. - James KanzeSip, gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html ayuda un poco para gcc, en windows es una historia diferente - Ferenc Deak