Могу ли я отключить имена RTTI GCC? - PullRequest
6 голосов
/ 18 января 2010

Используя gcc, когда я запрашиваю тип объекта / переменной с помощью typeid, я получаю результат, отличный от метода type_info :: name, от того, что я ожидал получить в Windows. Я немного погуглил и обнаружил, что имена RTTI зависят от реализации.

Проблема в том, что я хочу получить имя типа, которое будет возвращено в Windows. Есть ли простой способ сделать это?

Ответы [ 3 ]

7 голосов
/ 18 января 2010

Если это то, что вы спрашиваете, нет переключателя компилятора, который бы заставил gcc вести себя как msvc относительно имени, возвращаемого type_info::name().

Однако в вашем коде вы можете положиться на специфическую для gcc функцию __cxa_demangle.

На самом деле есть ответ на SO, который решает вашу проблему .

Ссылка: Руководство по libstdc ++, Глава 40. Разоблачение .

1 голос
/ 18 января 2010

имена функций c ++ действительно включают в себя всю информацию о типе возвращаемого значения и аргумента, а также имя класса и метода.При компиляции они «искажаются» в стандартную форму (стандартную для каждого компилятора), которая может выступать в качестве символа ассемблера и включает в себя всю информацию о типе.

Вам необходимо запустить функцию или программу, чтобы обратить это искажение, называется demangler .

, попробуйте запустить

c++filt myoutput.txt

на выходе функции.Это восстанавливает реальное имя символа обратно в удобочитаемую форму.

0 голосов
/ 31 марта 2012

Основываясь на этом другом вопросе Существует ли онлайн-деманглир для C ++? Я написал онлайн-инструмент для этого: c ++ filtersjs

...