C++ Boost程序选项语法

C++ Boost程序选项语法,c++,boost,command-line,boost-program-options,C++,Boost,Command Line,Boost Program Options,我使用从命令行参数读取用户的输入。它工作得非常好,允许我输出有用的使用信息并正确验证输入。但是,默认情况下,长选项名称必须位于双破折号之后,例如--my_long_option,短选项必须位于单破折号之后,并且必须是单个字符,例如-m 有没有一种方法可以 在单个-之后是否允许长选项 是否允许短选项包含多个字符 这样我就可以拥有如下命令行 ./a.out -myopt1 foo -myopt2 bar 这两种可能性应该具有相同的效果,尽管从编程的角度来看,第一种可能更好。我看了一下,但它看起

我使用从命令行参数读取用户的输入。它工作得非常好,允许我输出有用的使用信息并正确验证输入。但是,默认情况下,长选项名称必须位于双破折号之后,例如
--my_long_option
,短选项必须位于单破折号之后,并且必须是单个字符,例如<代码>-m

有没有一种方法可以

  • 在单个
    -
    之后是否允许长选项
  • 是否允许短选项包含多个字符
这样我就可以拥有如下命令行

./a.out -myopt1 foo -myopt2 bar
这两种可能性应该具有相同的效果,尽管从编程的角度来看,第一种可能更好。我看了一下,但它看起来不能满足我的需要

谢谢

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


根据定义,短选项只有一个字符。如果他们有更多的选择,他们会有很多选择

要允许长选项以单破折号开始,请包括
allow\u long\u converge
命令行样式:

可以通过与短选项相同的字符引入长选项,请参见允许长选项伪装


哦,天哪,我发誓我看的时候它不在那里。显然没有足够的咖啡。明天有机会我会试试的。谢谢。这似乎是最好的解决方案,不过有几个注意事项需要注意。未知参数“
-myopt1
”将触发异常消息“
未知选项-m
”。此外,自动生成的帮助文本仍将显示“
--myopt2
”。可能重复的“是”几乎完全重复,但给出的答案并不完全正确。解决方案的基础并不难,但为了完整起见,我在这里添加了它。
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);