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.

2

Решение

ОБНОВИТЬ К сожалению, эта библиотека использует тот же 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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]