2010-10-07 15 views
9

Actualmente estoy intentando depurar un código simple y deseo ver cómo cambia un tipo de variable específico durante el programa.typeinfo/typeid output

Estoy usando el archivo de encabezado typeinfo para poder utilizar typeid.name(). Soy consciente de que typeid.name() es específico del compilador, por lo que el resultado puede no ser particularmente útil o estándar.

Estoy usando GCC pero no puedo encontrar una lista del resultado potencial a pesar de la búsqueda, suponiendo que exista una lista de símbolos de salida tipográficos. No quiero hacer ningún tipo de casting basado en la salida o manipular cualquier tipo de datos, simplemente siga su tipo.

#include <iostream> 
#include <typeinfo> 

int main() 
{ 
    int a = 10; 
    cout << typeid(int).name() << endl; 
} 

¿Hay una lista de símbolos en cualquier lugar?

+0

podría valer la pena señalar que se trata de GCC incluido con MinGW. – aLostMonkey

+1

si solo quiere seguir los tipos, ¿qué tal 'if (typeid (a) == typeid (int)) {/ * action * /}'? – Donotalo

+0

¿Qué estás tratando de hacer? ¿A qué te refieres con la lista de símbolos exactamente? – sellibitze

Respuesta

15

no sé si existe una lista de este tipo, pero se puede hacer un pequeño programa para imprimirlos:

#include <iostream> 
#include <typeinfo> 

#define PRINT_NAME(x) std::cout << #x << " - " << typeid(x).name() << '\n' 

int main() 
{ 
    PRINT_NAME(char); 
    PRINT_NAME(signed char); 
    PRINT_NAME(unsigned char); 
    PRINT_NAME(short); 
    PRINT_NAME(unsigned short); 
    PRINT_NAME(int); 
    PRINT_NAME(unsigned int); 
    PRINT_NAME(long); 
    PRINT_NAME(unsigned long); 
    PRINT_NAME(float); 
    PRINT_NAME(double); 
    PRINT_NAME(long double); 
    PRINT_NAME(char*); 
    PRINT_NAME(const char*); 
    //... 
} 
+0

muchas gracias, no estoy muy seguro de por qué esto no pasó por mi mente. Esto funciona perfectamente – aLostMonkey

+5

'template void PRINT_NAME() {std :: cout << ...}' – Potatoswatter

+0

@Potatoswatter y cómo se escribe en T? tu solución es menos poderosa que la de Bens. –