Windows/VC++에서 Linux/G ++ 로의 XML 처리를 위해 Xerces-c를 사용하는 코드 기반을 이식하고 있습니다.Xerces-c 및 플랫폼 간 문자열 리터럴
Windows에서 Xerces-c는 XmlCh
문자 유형으로 wchar_t
을 사용합니다. 이로 인해 사람들은 std::wstring
및 L""
구문의 문자열 리터럴을 사용할 수 있습니다.
Linux/G ++의 경우 wchar_t
은 32 비트이고 Xerces-c는 XmlCh
문자로 unsigned short int
(16 비트)을 사용합니다.
나는이 트랙을 따라 시작했습니다
#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
은 동일하지 않으며 자신의 포인터를 암시 적으로 변환되지 않습니다. 따라서 Xerces 함수에 u"Hello, world."
을 전달해도 잘못된 변환 오류가 발생합니다.
Xerces 함수에 전달한 모든 문자열을 명시 적으로 캐스팅해야하는 것처럼 보입니다. 하지만 전에는 크로스 플랫폼 Xerces-c 코드를 프로그래밍하는 데 더 안전한 방법을 알고 있는지 묻고 싶습니다.