选择C++17 Polyfill
mongocxx 驱动程序使用 C++ 17功能 std::optional
和std::string_view
。 要使用 C++ 17标准库实现来实现这些功能,请将 CMake 配置变量CMAKE_CXX_STANDARD
设置为17或更高。 否则,要为 C++ 之前的17配置编译 mongocxx 驱动程序,必须从以下选项中选择 polyfill 库实现:
bsoncxx(仅当 -DENABLE_BSONCXX_POLY_USE_IMPLS=ON 时才默认)
使用
-DBSONCXX_POLY_USE_IMPLS=ON
选择。 强烈建议使用此选项,因为它不需要额外的外部库依赖项。 要在未指定其他选项时为 C++ 之前的17配置默认选择此选项,请设立ENABLE_BSONCXX_POLY_USE_IMPLS=ON
(在即将发布的主要发布中,此选项启用默认设立为 ON)。MNMLSTC/core(非 Windows 平台的默认设置)
此选项已弃用,并将在即将发布的主要版本中删除。 使用
-DBSONCXX_POLY_USE_MNMLSTC=1
选择。注意
此选项将 MNMLSTC/core 的仅标头安装提供到 bsoncxx 库安装中,因此将在配置过程中从Github下载 MLNMLSTC。 如果系统上已有可用版本的 MNMLSTC,则可以使用
-DBSONCXX_POLY_USE_SYSTEM_MNMLSTC
来避免下载步骤。Boost( Windows 平台默认)
此选项已弃用,并将在即将发布的主要版本中删除。 使用
-DBSONCXX_POLY_USE_BOOST=1
选择。 如果使用的 MSVC 版本不支持 C++ 17 ,这是目前唯一的非 bsoncxx 选项。
注意
“default”是指未显式选择任何 polyfill 库时的 C++ 17之前的配置。
大多数用户应使用带有-DENABLE_BSONCXX_POLY_USE_IMPLS=ON
的默认行为。 但是,如果您对其中一个外部 polyfill 库有偏好(例如 已经是应用程序正在使用的依赖项),您可能更愿意显式选择该外部 polyfill 库,而不是依赖默认选择行为。
注意
C++标准一致性和 polyfill 功能支持的行为可能因所选 polyfill 库而异。 这些 polyfill 的目的是通过提供C++ 17等效项的替代项来支持C++ 之前的17配置。 因此,我们建议尽可能通过设置-DCMAKE_CXX_STANDARD=17
或更高版本来使用C++17标准库。
警告
polyfill 库的选择对 mongocxx 库的公共 API 和 ABI 有直接影响。 更改 polyfill 可能会导致破坏性源代码的更改(在编译期间)和破坏二进制文件的更改(在链接或执行期间)。 为了限制对 polyfill 特定配置或行为的依赖,请避免将stdx::string_view
和stdx::optional<T>
与非 mongocxx 库接口一起使用。