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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top