大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一直想着能通过现成的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/.html
不过注意,原文章中也提到了,使用过后要及时删除字符串指针。
于是就可以通过U2G(typeid(*this).name() + 6);得到了此类的中文名称。
那个+6是为了避去typeid前面不必要类型说明。只获得名称部分.