BOOST program_options:解析多个参数列表
问题描述:
我想通过正值或负值的多个参数。 是否可以解析它?BOOST program_options:解析多个参数列表
目前我有以下初始化:
vector<int> IDlist;
namespace po = boost::program_options;
po::options_description commands("Allowed options");
commands.add_options()
("IDlist",po::value< vector<int> >(&IDlist)->multitoken(), "Which IDs to trace: ex. --IDlist=0 1 200 -2")
("help","print help")
;
,我想呼吁:
./test_ids.x --IDlist=0 1 200 -2
unknown option -2
所以,program_options假设我传递-2作为另一种选择。
我可以配置program_options使其可以接受负整数值吗?
谢谢 Arman。
编辑: BTW,我用简单的分析程序,
store(command_line_parser(argc, argv).options(commands).run(), vm);
,但solution是使用扩展的一个:
parse_command_line
答
您是否尝试过 “-2” ?
编辑:报价似乎没有这样的伎俩,然而,改变了命令行风格的作品:
char* v[] = {"name","--IDlist=0","1","200","-2"};
int c = 5;
std::vector<int> IDlist;
namespace po = boost::program_options;
po::options_description commands("Allowed options");
commands.add_options()
("IDlist",po::value< std::vector<int> >(&IDlist)->multitoken(), "Which IDs to trace: ex. --IDlist=0 1 200 -2")
("help","print help")
;
po::variables_map vm;
po::store(parse_command_line(c, v, commands, po::command_line_style::unix_style^po::command_line_style::allow_short), vm);
po::notify(vm);
BOOST_FOREACH(int id, IDlist)
std::cout << id << std::endl;
答
注意:这是对接受的解决方案的评论。
禁用短期选项是关键。上面提出的解决方案kloffy的效果很好,但如果您碰巧使用positional_option_description
(例如,解析参数而不使用像ls file.txt instead of ls --file=file.txt
这样的选项),则可能很难将代码转换为使用parse_command_line
来完成此操作。
然而,你也可以禁用短选项,同时继续使用basic_command_line_parser
这样的:
更换
store(command_line_parser(argc, argv).options(commands).run(), vm);
与
store(command_line_parser(argc, argv).options(commands).style(
po::command_line_style::unix_style^po::command_line_style::allow_short
).run(), vm);
program_options被剥离 “”,所以 “-2” 成为-2,\ -2作为\ -2选项,单引号'-2'保持原样。 – Arman 2010-03-29 15:37:47
所以报价被剥离,它被解释为另一种选择?这很奇怪,从文档[1]看来,它似乎是要走的路。 [1] http://www.boost.org/doc/libs/1_42_0/doc/html/program_options/overview.html#id1419101 – kloffy 2010-03-29 15:45:12
我想引用整个列表也行不通?(--IDlist =“0 1 200 -2”) – kloffy 2010-03-29 15:52:50