я пытаюсь получить строку, сообщающую о типе класса без оформления на 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.
ОБНОВИТЬ К сожалению, эта библиотека использует тот же 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
На моих компиляторах
Других решений пока нет …