我正在尝试获取一个字符串报告一个没有装饰的类型的窗口(visual studio 2010),但根本没有成功。
由于UnDecorateName不起作用,我正在使用boost库。
#include <typeinfo>
#include <boost/core/demangle.hpp>
class MyObject{};
int main (int argc, char ** argv)
{
MyObject o;
const char * str = typeid(o).name(); // str = "class MyObject"
std::string dstr = boost::core::demangle( str ); // dstr = "class MyObject"
return 0;
}
如何从上面的代码中仅将“MyObject”作为输出字符串? 现在我不能使用c ++ 11方法。
答案 0 :(得分:1)
更新遗憾的是,这个库使用相同的底层demangling API:请参阅@cv_and_he的评论
您可以尝试使用较新的TypeIndex库:
<强> Live On Coliru 强>
#include <boost/type_index.hpp>
#include <iostream>
class MyObject { public: virtual ~MyObject() {} };
struct Derived : MyObject {};
int main() {
MyObject o;
Derived d;
std::cout << boost::typeindex::type_id<MyObject>().pretty_name() << "\n";
std::cout << boost::typeindex::type_id<Derived>().pretty_name() << "\n";
MyObject& r = d;
std::cout << boost::typeindex::type_id_runtime(r).pretty_name() << "\n";
}
打印
MyObject
Derived
Derived
在我的编译器上