从type_info.raw_name中取消修饰字符串

Undecorate string from type_info.raw_name

本文关键字:取消 字符串 name type info raw      更新时间:2023-10-16

假设我有一个由表达式typeid(int(&(*)())[10]).raw_name()返回的字符串。在Visual C++中,它返回.P6AAAY09HXZ。我如何获得原始类型表达式,或者至少是接近它的类型表达式?我已经尝试过UnDecorateSymbolName,但它会返回输入。该函数似乎只适用于修饰的函数名。是否可以修改返回的代码以使函数接受它?

您可以使用boost::core::demangleboost::typeindex:

#include <boost/core/demangle.hpp>
#include <boost/type_index.hpp>
using type = int(&(*)())[10];
auto name = typeid(type).name();
std::cout << boost::core::demangle( name ) << 'n';
std::cout << boost::typeindex::type_id<type>().pretty_name() << 'n'; 

演示