В 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 ++)