boost program_options接受最后一个标记后的所有值
问题描述:
有没有一种方法可以在boost :: program_options指定参数后收集所有值?有两点需要注意,但我需要接受无法识别的参数,并且需要接受可能包含短划线的值。我试着玩弄command_line_parser vs parse_command_line,我可以得到无法识别的值或包含破折号的值,但不能同时包含破折号。boost program_options接受最后一个标记后的所有值
例子: ./myprog Ignore1 Ignore2 --accept 1 --AlsoAccept 2 --AcceptAll 1 2 -3 4
我真的不关心验证--AcceptAll是通过最后的标志;我只是寻找逻辑,该标志后面的所有内容都返回一个字符串向量。
答
#include <boost/program_options.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <string>
namespace po = boost::program_options;
int
main(unsigned int argc, char** argv)
{
std::string foo;
std::vector<std::string> extra;
po::options_description desc;
desc.add_options()
("foo", po::value<std::string>(&foo), "some string")
("extra-options", po::value(&extra), "extra args")
;
po::positional_options_description p;
p.add("extra-options", -1);
po::variables_map vm;
po::store(
po::command_line_parser(argc, argv).
options(desc).
positional(p).
run(),
vm);
po::notify(vm);
BOOST_FOREACH(const std::string& i, extra) {
std::cout << i << std::endl;
}
return 0;
}
简单的会话
[email protected] ~> ./a.out --foo bar far hello world how are you
far
hello
world
how
are
you
[email protected] ~>
+0
该解决方案不允许我忽略参数,也不允许带' - '的参数。 – sfpiano 2010-08-13 19:19:06
答
的回答你的问题是几乎一样的答案,我对处理结束的选项的正确--
问题:Using '--' as end-of-options marker with boost::program_options。唯一需要更改的是--AcceptAll
代替--
的extra_style_parser
。
开始赏金,因为我遇到了对此功能的需求,而我以前的回答是不够的。 – 2010-12-05 18:55:28