2015-10-28 3 views
2

Я пытаюсь получить строку, сообщающую тип класса без оформления на окнах (visual studio 2010), без каких-либо успехов.boost :: core :: demangle on visual studio typeid(). Name

Поскольку 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

как о каких-то просто строках (т.е. удалить первые 6 символов)? –

+0

Это не работает во всех случаях. например: int *. – mrgiov

+1

Просто найдите ключевые слова class/struct/union/enum и удалите их из строки. –

ответ

1

UPDATE К сожалению этой библиотека использует то же базовое декодирование 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 

На моих составителях

+0

http://rextester.com/AEBX25187 – llonesmiz

+0

Прохладный. Я не знал, что есть мощные онлайн-компиляторы – sehe

+0

Редактировать: хороший онлайн-инструмент – mrgiov

 Смежные вопросы

  • Нет связанных вопросов^_^