1

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

所需的行为如下:

  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"

但是,选项 4 被解释为a: "file.txt", file: "". 有什么方法可以告知 program_options 如何解决这种模棱两可的情况?($ program --a -- file.txt确实可以按预期工作,但我也希望在没有额外内容的情况下也能正常工作。)我目前使用空字符串表示“未指定”,但这不是必需的。

4

2 回答 2

0

我想说即使是用户也会对这种行为感到困惑,而不仅仅是 PO。我不明白为什么我不能指定--awithout file,特别是如果 file 具有隐含值?非强制位置选项的隐式空文件名的目的是什么?我想不出一个。

您可以通过将解析器提供给 PO 来实现您的逻辑,文档中对此进行了描述。此外,也是最简单的,您可以在解析后手动更改参数 iffile未传递。

于 2012-07-21T22:18:47.823 回答
0

我通过手动将参数从移动afileif来解决问题,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();
}
于 2012-08-01T17:56:59.183 回答