В С++, когда мы используем 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 С++)