7

我正在使用 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);

如果我传递命令行参数-I hithere它可以工作,但是我传递/I hithereboost 会抛出一个boost::bad_any_castwhat()使用 boost::any_cast 转换失败”。

是否可以使用 program_options 来解析/-delimited 或--delimited 选项?额外的问题,它可以配置为/设置-相同的选项,但彼此是二元对立的吗?例如,/verbose可能意味着详细的日志记录,而-verbose可能意味着不太详细的日志记录。

4

1 回答 1

10

要使用/and -,请使用command_line_parser's方法和style_t标志style()的适当组合。例如:

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);

allow_long_disguise让我们/开始一个长选项。)

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

于 2010-05-26T20:44:24.077 回答