我正在移植使用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代碼。