Могу ли я отключить имена RTTI GCC?

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

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

3 ответа

Решение

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

Тем не менее, в вашем коде вы можете положиться на конкретный gcc __cxa_demangle функция.

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

Ссылка: руководство по libstdC++, глава 40. Деманглинг.

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

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

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

c++filt myoutput.txt

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

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

Другие вопросы по тегам