pet*_*ohn 4 c++ boost typeinfo boost-mpl
我想获取类型名称并将其打印用于调试目的.我使用以下代码:
#include <cxxabi.h>
inline const char* demangle(const char *s) {
abi::__cxa_demangle(s, 0, 0, NULL);
}
template<typename T>
inline const char* type_name() {
return demangle(typeid(T).name());
}
Run Code Online (Sandbox Code Playgroud)
它运行良好,但我认为有一个不必要的运行时开销.有没有办法获得在编译时计算的类型id的人类可读形式?我在考虑这样的事情:
boost::mpl::type_name<MyType>::value
Run Code Online (Sandbox Code Playgroud)
哪个会返回类型名称的字符串常量.
作为(不是那么严格)相关的问题:是否可以使用boost :: mpl进行字符串处理?
我看不到会typeid(T).name()产生运行时开销.typeid(expr)是的,如果expr是多态类型.
看起来demangling可能在运行时发生,但是你可以做很多事情.如果这只是用于调试那么我真的不会担心它太多,除非你的分析器表明这导致你的程序减慢太多,以至于调试它的其他元素很麻烦.