使用boost program_options,根据一个强制“模式”选项选择多组选项

时间:2011-02-01 12:36:25

标签: boost-program-options


让我假设我有一些名为modeA modeB common的选项组。我将在{}中引用这些内容 - 即{common}扩展到该组中描述的任何选项。

我希望能够强制执行以下命令行

command A {common} {modeA}
command B {common} {modeB}

来自模式和普通群体的选项的位置并不重要,可以交织在一起 以下将失败

command A {modeB}    /* Wrong option group for this mode */
command A B          /* A and B not allowed */

因此目标是

  • 必须出现的选项,并且是集合A | B之一
    • 如果可能的话,被迫成为第一个参数
  • 根据上述强制性参数
  • 将整个组解析为Ok或忽略

2 个答案:

答案 0 :(得分:0)

不是一个优雅的解决方案,但...... 将选项划分为至少三组,modeA / modeB和其他选项。其他包含帮助和模式选项。使用模式的自定义验证器来限制选项(使用默认值)然后

  • 合并所有群组并解析
  • 动作 - 如果需要帮助(解释所有模式/选项)
  • 确定模式
  • 制作新的群组合,留出不需要的模式并重新解析

我觉得必须有一个更光滑的方式

答案 1 :(得分:0)

我正在努力实现这一点,我能想到的最好的是

  1. 首先解析“核心”选项,但允许无法识别的选项
  2. 确定模式
  3. 通过collect_unrecognized
  4. 收集无法识别的选项
  5. 根据禁用无法识别的模式选项解析无法识别的选项(如果在模式A中使用模式B选项则触发错误)