我正在移植使用Xerces-c进行从Windows/VC++到Linux/G ++的XML处理的代码库。Xerces-c和跨平台字符串文字
在Windows上,Xerces-c使用wchar_t
作为字符类型XmlCh
。这使得人们可以使用std::wstring
和L""
语法的字符串文字。
在Linux/G ++上,wchar_t
是32位,Xerces-c使用unsigned short int
(16位)作为字符类型XmlCh
。
我沿着这条赛道开始了:
#ifdef _MSC_VER
using u16char_t = wchar_t;
using u16string_t = std::wstring;
#elif defined __linux
using u16char_t = char16_t;
using u16string_t = std::u16string;
#endif
不幸的是,char16_t
和unsigned short int
并不等同,他们的指针不是隐式转换。因此,将u"Hello, world."
传递给Xerces函数仍然会导致无效的转换错误。
它开始看起来像我将不得不显式投射我传递给Xerces函数的每个字符串。但在此之前,我想问问有没有人知道更好的方式来编写跨平台的Xerces-c代码。