该应用有两个选项:a
和file
。 file
是位置选项。 a
和file
都有一个string类型的参数,可以省略。 (我为两者设置了一个隐含的空字符串。)
所需的行为如下:
$ program
- > file: ""
$ program file.txt
- > file: "file.txt"
$ program --a
- > a: "", file: ""
$ program --a file.txt
- > a: "", file: "file.txt"
$ program --a x file.txt
- > a: "x", file: "file.txt"
但是,选项4被解释为a: "file.txt", file: ""
。有没有办法告诉program_options如何解决这种模糊的情况? ($ program --a -- file.txt
确实按预期工作,但我希望在没有额外的情况下使用它。 - 我正在使用空字符串来指示当前“未指定”,但这不是必需的。< / p>
答案 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}}