boost::core::demangle для визуальной студии typeid().name

Я пытаюсь получить строку, сообщающую о типе класса без оформления на windows (visual studio 2010), но безуспешно.

Так как UnDecorateName не работает, я использую библиотеки повышения.

#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" в качестве выходной строки из кода выше? Сейчас я не могу использовать методы с ++11.

1 ответ

ОБНОВЛЕНИЕ К сожалению, эта библиотека использует тот же API-интерфейс, что и в самом начале: см. Комментарий @cv_and_he

Вы можете попробовать более новую библиотеку TypeIndex:

Жить на Колиру

#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

На моих компиляторах

Другие вопросы по тегам