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

时间:2010-05-26 20:23:43

标签: 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);

如果我传递了命令行参数-I hithere,那么它可以正常工作,但是我通过/I hithere使用boost :: boost::bad_any_cast what()使用“:: {转换失败” any_cast”。

是否可以使用program_options解析/ - 分隔或- - 分隔选项?奖金问题,它是否可以配置为/-设置相同的选项,但彼此是二元对立的?例如,/verbose可能意味着详细记录,而-verbose可能意味着更详细的记录。

1 个答案:

答案 0 :(得分:10)

要使用/-,请使用command_line_parser的{​​{1}}方法以及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开始一个长期选项。)

您可以通过添加自己的additional parser来制作//对立面;然而,这将是非标准的,因此可能会让最终用户感到困惑,所以我不确定这是个好主意。