方法一:
CEGUI的字符串类设计的初衷是以32个字符为分界点, 低于32个字符使用固定buffer, 高于才使用栈分配内存存储字符串. 不过因为CEGUI使用utf32,兼容性虽然很好,但是在VC调试器里无法显示是个很大的问题.
这里参考了mybios博客中的文章,给CEGUI字符串做一个patch
然后需要找到vs2008的autoexp.dat文件
XP下位于:C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
用记事本等工具打开, 在AutoExpand段中像这样添加:
[AutoExpand]
; CEGUI String
CEGUI::String = str =<d_quickbuff,su> length =<d_cplength>
即可在VC调试器中看到CEGUI字符串内容, 不过中文还是暂时无法支持
方法二:
CEGUI的String不是std::string或std::wstring,而是自己实现的一个字符串类,他的功能跟std的string很接近。
但是,他支持unicode,内部存储是使用utf32编码规范来存储unicode字符,也就是说 typedef uint32 utf32; utf32* d_buffer;用这个32位无符号整型的数组来保存unicode字符串。优点是显而易见的,就是世界上所有字符都可以包囊进去,毕竟是32位啊!但是,缺点也出来了,有两点:
第一、内存占用过多,一个字符就要占4个字节,也太浪费了点;
第二、调试不方便,由于VS2005的调试窗口只支持ansi和utf16的格式,所以,CEGUI的String在调试器中只能看到一堆数字数组,而看不到字符,这是很郁闷的,每次要查看都要翻到内存那里看,而且还一堆乱码,超级麻烦。
解决办法:修改String类,使用utf16来代替CEGUI的utf32。
优点:
解决了内存占用过多的问题,一个字符只要2个字节就可以了;
解决了调试问题,VS2005直接支持utf16的显示。
缺点:
可能不支持全世界的字符,因为utf16不能表示超过16位的字符,但是,对于大多数国家的字符来说,已经足够了,毕竟windows2000/xp也是基于utf16编码的。
然后,下面是修改后的字符串类:
CEGUIString