从type_info.raw_name中取消修饰字符串
Undecorate string from type_info.raw_name
假设我有一个由表达式typeid(int(&(*)())[10]).raw_name()
返回的字符串。在Visual C++中,它返回.P6AAAY09HXZ
。我如何获得原始类型表达式,或者至少是接近它的类型表达式?我已经尝试过UnDecorateSymbolName,但它会返回输入。该函数似乎只适用于修饰的函数名。是否可以修改返回的代码以使函数接受它?
您可以使用boost::core::demangle
或boost::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';
演示