Могу ли я отключить имена RTTI GCC?
Используя gcc, когда я запрашиваю тип объекта / переменной с помощью typeid, я получаю результат, отличный от метода type_info::name, от того, что я ожидал получить в Windows. Я немного погуглил и обнаружил, что имена RTTI зависят от реализации.
Проблема в том, что я хочу получить имя типа, как оно будет возвращено в Windows. Есть простой способ сделать это?
3 ответа
Если это то, что вы спрашиваете, нет переключателя компилятора, который бы заставил gcc вести себя как msvc относительно имени, возвращаемого type_info::name()
,
Тем не менее, в вашем коде вы можете положиться на конкретный gcc __cxa_demangle
функция.
На самом деле есть ответ на SO, который решает вашу проблему.
Имена функций C++ действительно включают в себя всю информацию о типе возвращаемого значения и аргумента, а также имя класса и метода. При компиляции они "искажаются" в стандартную форму (стандартную для каждого компилятора), которая может выступать в качестве символа ассемблера и включает в себя всю информацию о типе.
Вам нужно запустить функцию или программу, чтобы изменить это искажение, называемое деманглером.
попробуйте запустить
c++filt myoutput.txt
на выходе функции. Это превращает настоящее имя символа обратно в понятную человеку форму.
Основываясь на этом другом вопросе Есть ли в сети деманглер имен для C++? Я написал онлайн-инструмент для этого: C++ FilterJS