提升程序选项语法

Dan*_*Dan 15 c++ command-line boost boost-program-options

我正在使用boost :: program_options从命令行参数中读取用户的输入.它工作得非常好,允许我输出有用的使用信息并正确验证输入.但是,默认情况下,长选项名称必须在双击之后,例如--my_long_option短选项在单个短划线之后,并且必须是单个字符,例如; -m.

还有办法要么......

  • 单个后允许长期选项-
  • 允许短选项有多个字符?

因此允许我拥有看起来像的命令行

./a.out -myopt1 foo -myopt2 bar
Run Code Online (Sandbox Code Playgroud)

这两种可能性应该具有相同的效果,但从编程的角度来看,第一种可能会更好.我看了一下boost :: program_options :: command_line_style,但看起来它看起来不像我需要的那样.

谢谢

编辑:进一步接受下面接受的答案,让它使用该样式必须添加以下代码(遵循提升文档的命名约定)

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);
Run Code Online (Sandbox Code Playgroud)

Rob*_*edy 23

根据定义,短选项只有一个字符.如果他们有更多,他们将是很长的选择.

要允许长选项以单个破折号开头,请包含allow_long_disguise命令行样式,如您链接到的文档页面所述:

可以使用与短选项相同的字符引入长选项,请参阅allow_long_disguise.

  • 亲爱的,我发誓当我看的时候不在那里.咖啡显然不够.我明天有机会试试看.谢谢. (5认同)
  • 这似乎是最好的解决方案,尽管有一些注意事项需要注意。未知参数“`-myopt1`”将触发异常消息“`unknown option -m`”。此外,自动生成的帮助文本仍将显示“`--myopt2`”。 (2认同)