我想用正值或负值传递多个参数。 是否可以解析它?
目前我有以下初始化:
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,使其可以接受负整数值吗?
由于 阿尔曼。
修改 顺便说一下,我用简单的解析器解析它
store(command_line_parser(argc, argv).options(commands).run(), vm);
,但solution是使用扩展名:
parse_command_line
答案 0 :(得分:9)
你试过“-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;
答案 1 :(得分:6)
注意:这是对已接受解决方案的评论。
禁用短期权是关键。 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);
答案 2 :(得分:-1)
也许可以尝试--IDlist“0,1,200,-2”或--IDlist =“0,1,200,-2”