gpt4 book ai didi

c++ - 如何在静态库中提供默认的 YAML 配置值?

转载 作者:行者123 更新时间:2023-11-30 05:22:12 27 4
gpt4 key购买 nike

我有一个用 C++ 编写的配置文件系统,它使用 yaml-cpp 库来解析和写入 YAML 文件。我将其作为静态库的一部分。

我希望能够为库用户(从他们的代码调用)请求的字段返回默认值,但用户的 YAML 文件中尚未定义该字段。

例如,假设用户想要使用他们的自定义 config.yaml 文件中的字段 foo:

int bar = config_reader.read<int>( "config.yaml", "foo" );

如果他们的 config.yaml 中有 foo: 10,那么 bar 将设置为 10。不过我也想提供在 config.yaml 中省略 foo 的情况下的默认值(例如 4)。

我想到了两种可能:

  1. 在编译到静态库中的 cpp 文件中有一组字段名称和默认值之间的静态映射,但是我需要为不同的类型使用不同的映射,我觉得这可能会导致类型困惑检查并可能需要模板专门化方法。

  2. 拥有一个 YAML 文件,其中包含预期字段的所有默认值,如果配置系统无法在用户的配置文件中找到该字段,则会回退到该文件。我认为这将是我的首选解决方案,但我想不出打包此 YAML 文件的巧妙方法。我希望用户不必在每次设置链接静态库的新项目时都复制或指向此文件。

最佳答案

我会在全局(即非用户特定位置)的 YAML 文件中提供默认值,并允许用用户特定的值覆盖这些值。如果全局默认值缺少一个条目,请考虑只抛出一个错误,这不会偶然发生。

您可以将全局默认值放入 /etc/default/YOUBLIBNAME.yaml。现在用户的配置大多遵循XDG基本目录规范。如果在环境中设置了 XDG_CONFIG_HOME,则使用 $XDG_CONFIG_HOME/YOURLIBNAME/config.yaml,如果未设置,则使用 $HOME/.config/YOURLIBNAME/config。 yaml

如果您的库必须在 Windows 下工作,我会将用户特定数据放在子目录 YOURBLINAME%APPDATA% 下。

关于c++ - 如何在静态库中提供默认的 YAML 配置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39742448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com