2010-10-07 8 views
9

Attualmente sto cercando di eseguire il debug di un pezzo di codice semplice e desidero vedere come cambia un tipo di variabile specifico durante il programma.typeinfo/typeid output

Sto utilizzando il file di intestazione typeinfo in modo da poter utilizzare typeid.name(). Sono consapevole che typeid.name() è specifico del compilatore, quindi l'output potrebbe non essere particolarmente utile o standard.

Sto utilizzando GCC ma non riesco a trovare un elenco di output potenziale nonostante la ricerca, presupponendo che esista un elenco di simboli di output di tipo. Non voglio fare alcun tipo di casting basato sull'output o manipolare alcun tipo di dati, basta seguire il suo tipo.

#include <iostream> 
#include <typeinfo> 

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

C'è un elenco di simboli ovunque?

+0

potrebbe essere la pena di notare che si tratta di GCC in bundle con MinGW. – aLostMonkey

+1

se si desidera seguire i tipi, quindi come 'if (typeid (a) == typeid (int)) {/ * action * /}'? – Donotalo

+0

Che cosa stai cercando di fare? Cosa intendi per elenco di simboli esattamente? – sellibitze

risposta

15

non so se esiste un tale elenco, ma si può fare un piccolo programma per stampare fuori:

#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

molte grazie, non troppo sicuro del perché questo non mi è passato per la mente. Questo funziona perfettamente. – aLostMonkey

+5

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

+0

@Potatoswatter e in che modo si stringifica T? la tua soluzione è meno potente di quella di Bens. –