Posso ungarble nomi RTTI del GCC?
-
21-09-2019 - |
Domanda
Utilizzare gcc, quando chiedo per il tipo di un oggetto / variabile utilizzando typeid, ottengo un risultato diverso dal metodo type_info :: nome da quello che mi aspetto di ottenere su Windows. I Googled un po 'intorno, e ho scoperto che i nomi RTTI sono specifici per applicazione.
Il problema è che, voglio ottenere il nome di un tipo come sarebbe essere restituito su Windows. C'è un modo semplice per fare questo?
Soluzione
Se è quello che stai chiedendo, non v'è alcuna opzione del compilatore gcc che avrebbe fatto si comportano come msvc per quanto riguarda il nome restituito da type_info::name()
.
Tuttavia, nel codice si può fare affidamento sulla funzione specifica __cxa_demangle
gcc.
C'è infatti una risposta sul SO che affronta il problema .
Riferimento:. libstdc ++ manuale, capitolo 40. demangling
Altri suggerimenti
c ++ nomi delle funzioni sono davvero tutto il ritorno e l'argomento informazioni sul tipo e il nome della classe e il metodo. Quando compilato, sono 'straziati' in una forma standard (standard per ogni compilatore) che può agire come un simbolo assemblatore e include tutte le informazioni sul tipo.
È necessario eseguire una funzione o un programma per invertire questa mutilazione, chiamato demangler .
provare a eseguire
c++filt myoutput.txt
sull'uscita della funzione. Questo demangles il vero nome del simbolo di nuovo in una forma leggibile.
In base a questa altra questione C'è un nome demangler in linea per C ++ ? ho scritto uno strumento online per questo: C ++ filtjs