通过typeid.name函数获得中文名类的中文名

通过typeid.name函数获得中文名类的中文名

一直想着能通过现成的typeid.name()函数直接获得我中文类的名字,可是却一直得到的乱码,网上搜索了好久也没有答案,最后终于在我不懈寻找下找到了解决方法。

最后发现是文字编码不同的原因,储存在代码中的编码方式,和通过cout输出出来的文字编码方式不同

这个我也不太懂,于是从网上找了许多编码方式转换的函数。试了好多不行,不过最后还是让我试到了。

 

char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}

转载自:https://www.cnblogs.com/babietongtianta/p/3143900.html

不过注意,原文章中也提到了,使用过后要及时删除字符串指针。

 

于是就可以通过U2G(typeid(*this).name() + 6);得到了此类的中文名称。

那个+6是为了避去typeid前面不必要类型说明。只获得名称部分.

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 通过typeid.name函数获得中文名类的中文名