Удаление пространства имен имени типа в C ++

В C ++, когда мы используем typeid для получения имени типа объекта или класс, он покажет декорированную (искореженную) строку. Я использую cxxabi , чтобы разобрать его:

#include <cxxabi.h>
#include <typeinfo>

namespace MyNamespace {

class MyBaseClass
{
public:
    const std::string name()
    {
        int status;
        char *realname = abi::__cxa_demangle(typeid (*this).name(),0,0, &status);
        std::string n = realname;
        free(realname);
        return n;
    }
};

}

int main()
{
    MyNamespace::MyBaseClass h;
    std::cout << h.name() << std::endl;
}

Вывод в gcc :

MyNamespace :: MyBaseClass

Мне нужно удалить MyNamespace :: сверху строки. Я могу удалить их, манипулируя строкой .

Но существует ли стандартный способ с cxxabi или другими библиотеками для этого или ясное решение? (По крайней мере, переносимый между gcc и Visual C ++)

20
задан masoud 14 May 2013 в 14:54
поделиться