为什么 xerces 将 XMLCh 更改为 char16_t,我可以将其更改回 wchar_t 吗?

Why has xerces changed XMLCh to char16_t, can I change it back to wchar_t?

我们一直在使用 Xerces 3.1.1 的旧预构建版本,该版本具有:

3.1.1: Xerces_autoconf_config.hpp

#ifdef _NATIVE_WCHAR_T_DEFINED
#  define XERCES_XMLCH_T      wchar_t
#else
#  define XERCES_XMLCH_T      unsigned short
#endif
...
typedef XERCES_XMLCH_T              XMLCh;

开始使用 vcpkg 它已经安装了 3.2.3 并且我们有编译错误,因为它使用的不是 wchar_t

3.2.3: Xerces_autoconf_config.hpp

#define XERCES_XMLCH_T char16_t
...
typedef XERCES_XMLCH_T              XMLCh;

我们有 很多 代码进行调用,如 src.setEncoding(L"UTF-16");,这显然会导致错误,例如:

void xercesc_3_2::InputSource::setEncoding(const XMLCh *const )': cannot convert argument 1 from 'const wchar_t [7]' to 'const XMLCh *const '

我不确定 Xerces 是否已更改,或者这是 vcpkg 的默认构建设置的结果。是否有可能将其恢复到 wchar_t(黑客来源除外),如果可以,怎么做?不幸的是,我是一个完全的 cmake 菜鸟。

好的,根据xerces-c docs

XMLCh 类型(UTF-16 字符类型):

Option Description
-Dxmlch-type=char16_t use char16_t (requires a C++11 compiler)
-Dxmlch-type=uint16_t use uint16_t from or <stdint.h>, or another unsigned 16-bit type such as unsigned short if the standard types are unavailable
-Dxmlch-type=wchar_t use wchar_t (Windows only)

vcpkg中,这是通过features部分公开的:

vcpkg install xerces-c[xmlch-wchar] XMLCh 类型使用 wchar_t