我正在使用这样的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
可能意味着更详细的记录。
答案 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来制作/
和/
对立面;然而,这将是非标准的,因此可能会让最终用户感到困惑,所以我不确定这是个好主意。