在visual studio typeid()。name上的boost :: core :: demangle

时间:2015-10-28 08:58:25

标签: c++ windows boost demangler

我正在尝试获取一个字符串报告一个没有装饰的类型的窗口(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方法。

1 个答案:

答案 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

在我的编译器上