在调用 boost parseOptions 时保留预设(非默认)值

Keeping preset (non-default) values when calling boost parseOptions

本文关键字:默认 boost 调用 parseOptions 保留      更新时间:2023-10-16

在我的项目中,我有一些内部配置结构,其中包含使用默认值(假设Config.x=0, Config.y=0(进行选项注册,这些值对于客户端不可修改。

有时我的应用程序的用户希望在解析命令行参数之前修改这些字段的默认值,因此在解析之前,他们只需手动更改这些值(假设Config.x=3, Config.y=4(,然后获取命令行/.ini ifle 选项并使用 parseOptions 解析它。

如果这些外部参数仅包含这些选项的一部分,即 Config.x=9,其他选项的值将是使用 boost::p rogram_options 注册的值,而不是当前分配的值,因此结果将是 Config.x=9, Config.y=0 而不是 Config.x=9, Config.y=4 。所以基本上看起来,boost::p rogram_options::p arseOptions 在解析之前清除所有选项。

无论如何可以防止 boost 清除已分配的选项,以防它们没有出现在命令行参数中?

这是不可能的。但是,您应该能够手动¹创建parsed_options,或者您可以将选项作为"假"配置文件提供,以便您可以实际使用配置文件解析器。

获得parsed_options后,您可以像往常一样存储/通知它们。


¹ 尽管不支持/记录这一点,但请参阅boost::program_option::basic_parsed_options<>中的评论