Boost Program Options可选参数优先级

时间:2012-07-21 16:39:13

标签: boost-program-options

该应用有两个选项:afilefile是位置选项。 afile都有一个string类型的参数,可以省略。 (我为两者设置了一个隐含的空字符串。)

所需的行为如下:

  1. $ program - > file: ""

  2. $ program file.txt - > file: "file.txt"

  3. $ program --a - > a: "", file: ""

  4. $ program --a file.txt - > a: "", file: "file.txt"

  5. $ program --a x file.txt - > a: "x", file: "file.txt"

  6. 但是,选项4被解释为a: "file.txt", file: ""。有没有办法告诉program_options如何解决这种模糊的情况? ($ program --a -- file.txt确实按预期工作,但我希望在没有额外的情况下使用它。 - 我正在使用空字符串来指示当前“未指定”,但这不是必需的。< / p>

2 个答案:

答案 0 :(得分:0)

我会说甚至用户也会对这种行为感到困惑,而不仅仅是PO。 我无法理解为什么在没有--a的情况下我无法指定file,尤其是如果file具有implementationcit值?隐藏空文件名的目的是什么是非专用位置选项?我想不出一个。

您可以通过给PO解析器来实现您的逻辑,它在文档中有描述。此外,最简单的是,如果未传递file,您可以在解析后手动更改参数。

答案 1 :(得分:0)

如果a指定为file,我可以通过手动将参数从a移动到// Fix argument precedence if (!vm.count("file") && vm.count("a")) { vm.insert(std::make_pair("file", vm.at("a"))); vm.at("a").as<std::string>() = std::string(); } 来解决问题:

{{1}}