Boost程序选项语法

18

我正在使用boost::program_options来读取用户从命令行输入的参数。它非常方便,让我能够输出有用的使用信息并正确验证输入。但是,默认情况下,长选项名称必须在双破折线后面,例如--my_long_option,而短选项必须在单破折线后面且必须是单个字符,例如-m

是否有一种方法可以...

  • 允许单个-后面跟着长选项?
  • 允许短选项具有多个字符?

这样就可以让我的命令行看起来像:

./a.out -myopt1 foo -myopt2 bar
两种可能性的效果应该是相同的,但从编程的角度来看,第一种方法会更好。我查看了boost::program_options::command_line_style,但它似乎不能满足我的需求。
谢谢。 编辑:进一步地,在接受下面的答案后,为了使用该样式,必须添加以下代码(按照boost文档的命名约定)。
po::store(
    po::command_line_parser(ac,av)
        .options(desc)
        .style(
            po::command_line_style::unix_style
          | po::command_line_style::allow_long_disguise)
        .run(),
    vm);

可能是重复的问题:[如何在Boost :: Program_Options中支持命令行语法“-DEVICE:iphone”?](https://dev59.com/6VnUa4cB1Zd3GeqPeNTf) - Nicol Bolas
是的,基本上是重复的,但那里给出的答案不太正确。根据那个并不难想出解决方案,但为了完整起见,我在这里添加了它。 - Dan
1个回答

29

短选项根据定义只有一个字符。如果它们有更多字符,就会变成长选项。

为了允许长选项以单破折号开始,需要在命令行样式中包含allow_long_disguise正如您链接到的文档页面所述:

通过允许长选项使用与短选项相同的字符来引入长选项,可以使用allow_long_disguise。


7
亲爱的,我发誓在我看过去的时候那里没有这个。显然是咖啡还不够充足。我会在明天有机会时尝试一下。谢谢。 - Dan
2
这似乎是最好的解决方案,但需要注意一些警告。未知参数“-myopt1”将触发异常消息“unknown option -m”。此外,自动生成的帮助文本仍将显示“--myopt2”。 - Drew Dormann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接