【问题标题】:Boost program options: multiple options for the same valueBoost 程序选项:相同值的多个选项
【发布时间】:2014-02-20 12:31:49
【问题描述】:

我正在尝试使用 boost::program_options 获取输入选项。

我想有两个选项来源,一个来自命令行,另一个来自文件,但我也想为相同的值设置不同的选项名称。

commandLine.add_options()
 ("dim,d", po::value<int>(&dimension), "Problem dimension")
 ("adv", po::value<bool>(&adv_enabled), "Enable/Disable advection term {1|0}")
 ("div", po::value<bool>(&div_enabled), "Enable/Disable divergance term {1|0}")

file_options.add_options()
 ("dimension",po::value<int>(&dimension), "Set Problem dimension")
 ("enable.advection", po::value<bool>(&adv_enabled), "Enable/Disable advection")
 ("enable.divergance", po::value<bool>(&div_enabled), "Enable/Disable divergance")

这里我想在命令行中使用较短的版本,在文件中使用分组版本。

有没有办法只将变量传递给两者,或者我应该在代码中解析它们?

【问题讨论】:

  • 看起来命令行选项值将被文件选项值覆盖。那是你要的吗?你试过执行吗?
  • 我想用命令行选项覆盖文件选项,但它没有做我想要的。我测试运行代码,如果我用命令行更改尺寸,它不会更新值。

标签: c++ boost boost-program-options


【解决方案1】:

文档中的答案非常简单:

当然,需要结合命令行和配置文件中的值。例如,命令行上指定的优化级别应该覆盖配置文件中的值。另一方面,应该合并包含路径。

...如果在命令行和配置文件中都指定了相同的值会发生什么?通常,首先存储的值是首选。这就是“--optimization”选项发生的情况。对于“组合”选项,例如“包含文件”,这些值会被合并。
http://www.boost.org/doc/libs/1_55_0/doc/html/program_options/tutorial.html#idp163316264

您可以添加在命令行和配置中重复的选项,如果它是非合并选项,则会优先使用第一个使用 po::store() 调用的选项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多