【发布时间】:2010-06-17 19:50:35
【问题描述】:
如果我的命令行是:
> prog --mylist=a,b,c
可以设置 Boost 的 program_options 来查看 mylist 参数的三个不同的参数值吗?我已将 program_options 配置为:
namespace po = boost::program_options;
po::options_description opts("blah")
opts.add_options()
("mylist", std::vector<std::string>>()->multitoken, "description");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, opts), vm);
po::notify(vm);
当我检查mylist 参数的值时,我看到一个值为a,b,c。我想看到三个不同的值,用逗号分隔。如果我将命令行指定为:
> prog --mylist=a b c
或
> prog --mylist=a --mylist=b --mylist=c
有没有办法配置 program_options 使其将 a,b,c 视为应插入向量中的三个值,而不是一个?
我使用的是 boost 1.41、g++ 4.5.0 20100520,并启用了 c++0x 实验扩展。
编辑:
接受的解决方案有效,但最终变得更加复杂,IMO,而不是仅仅迭代向量并手动拆分值。最后,我接受了 James McNellis 的建议并以这种方式实施。但是,他的解决方案并未作为答案提交,因此我接受了 hkaiser 的另一个正确解决方案。两者都有效,但手动标记更清晰。
【问题讨论】:
-
如果不出意外,您可以使用
boost::tokenizer标记逗号分隔的值。 -
这可能是最简单的事情了。只需对参数进行后处理并处理出现逗号的情况。
标签: c++ boost c++11 boost-program-options