使用 gcc,当我使用 typeid 请求对象/变量的类型时,我从 type_info::name 方法得到的结果与我期望在 Windows 上得到的结果不同。我搜索了一下,发现 RTTI 名称是特定于实现的。
问题是,我想获得一个类型的名称,因为它将在 Windows 上返回。是否有捷径可寻?
使用 gcc,当我使用 typeid 请求对象/变量的类型时,我从 type_info::name 方法得到的结果与我期望在 Windows 上得到的结果不同。我搜索了一下,发现 RTTI 名称是特定于实现的。
问题是,我想获得一个类型的名称,因为它将在 Windows 上返回。是否有捷径可寻?
如果这是您要问的,则没有编译器开关可以使 gcc 的行为类似于 msvc 关于type_info::name()
.
但是,在您的代码中,您可以依赖 gcc 特定__cxa_demangle
功能。
c++ 函数名称实际上包括所有返回和参数类型信息以及类和方法名称。编译时,它们被“修改”成标准形式(每个编译器的标准),可以充当汇编器符号并包含所有类型信息。
您需要运行一个函数或程序来反转这种修饰,称为demangler。
尝试运行
c++filt myoutput.txt
关于函数的输出。这会将真实的符号名称重新转换为人类可读的形式。
基于this other question Is there an online name demangler for C++? 我为此编写了一个在线工具:c++filtjs