可以boost :: program_options使用除" - "之外的分隔符吗?

Joh*_*ing 7 c++ boost-program-options

我正在使用boost :: program_options这样:

namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
  ("help,?", "Show Options")
  ("capture-file,I", po::value<string>(), "Capture File")   
  ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format")
  ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File");

po::variables_map vm;
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm);
Run Code Online (Sandbox Code Playgroud)

如果我通过命令行参数-I hithere它的工作原理,但我通过/I hithere升压抛出了boost::bad_any_cast一个what()"使用boost :: any_cast失败的转换"的.

是否可以使用program_options来解析/-delimitted或--delimitted选项?奖金的问题,可以将其进行配置,以便/-设置相同的选项,但在彼此的二元对立?例如,/verbose可能意味着详细记录,而-verbose可能意味着更简洁的记录.

Jos*_*ley 10

要使用/-,请使用带有style_t标志的适当组合command_line_parserstyle()方法.例如:

po::store(po::command_line_parser(ac, av)
    .options(desc)
    .style(po::command_line_style::default_style
        | po::command_line_style::case_insensitive
        | po::command_line_style::allow_slash_for_short
        | po::command_line_style::allow_long_disguise)
    /*.positional(pd)*/
    .run(), vm);
Run Code Online (Sandbox Code Playgroud)

(allow_long_disguise让我们/开始一个长期的选择.)

您可以通过添加自己的附加解析器来制作/-对立; 然而,这将是非标准的,因此可能使最终用户感到困惑,所以我不确定这是一个好主意.