猿问

解开std :: type_info :: name的结果

解开std :: type_info :: name的结果

我目前正在研究一些日志代码,它们应该 - 除其他外 - 打印有关调用函数的信息。这应该相对容易,标准C ++有一个type_info类。它包含typeid'd类/函数/ etc的名称。但它被破坏了。它不是很有用。即typeid(std::vector<int>).name()回归St6vectorIiSaIiEE

有没有办法从中产生有用的东西?就像std::vector<int>上面的例子一样。如果它只适用于非模板类,那也没关系。

该解决方案应该适用于gcc,但如果我可以移植它会更好。这是为了记录所以它不是那么重要,它不能被关闭,但它应该有助于调试。


郎朗坤
浏览 1150回答 3
3回答

HUH函数

这就是我们使用的。HAVE_CXA_DEMANGLE仅在可用时设置(仅限最新版本的GCC)。#ifdef&nbsp;HAVE_CXA_DEMANGLEconst&nbsp;char*&nbsp;demangle(const&nbsp;char*&nbsp;name){ &nbsp;&nbsp;&nbsp;char&nbsp;buf[1024]; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;size=1024; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;status; &nbsp;&nbsp;&nbsp;&nbsp;char*&nbsp;res&nbsp;=&nbsp;abi::__cxa_demangle&nbsp;(name, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&size, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&status); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;res; &nbsp;&nbsp;}#elseconst&nbsp;char*&nbsp;demangle(const&nbsp;char*&nbsp;name){ &nbsp;&nbsp;return&nbsp;name;}#endif
随时随地看视频慕课网APP
我要回答