BOOST program_options:解析多个参数列表

时间:2010-03-29 15:20:46

标签: c++ boost 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,使其可以接受负整数值吗?

由于 阿尔曼。

修改 顺便说一下,我用简单的解析器解析它

store(command_line_parser(argc, argv).options(commands).run(), vm);

,但solution是使用扩展名:

parse_command_line

3 个答案:

答案 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”