【问题标题】:Why has xerces changed XMLCh to char16_t, can I change it back to wchar_t?为什么 xerces 将 XMLCh 更改为 char16_t,我可以将其更改回 wchar_t 吗?
【发布时间】:2021-07-21 12:38:28
【问题描述】:

我们一直在使用 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 )': 无法将参数 1 从 'const wchar_t [7]' 转换为 'const XMLCh *常量'

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

【问题讨论】:

    标签: cmake vcpkg xerces-c


    【解决方案1】:

    好的,根据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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      相关资源
      最近更新 更多