2010-07-29 51 views
5

有没有一种方法可以在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是通过最后的标志;我只是寻找逻辑,该标志后面的所有内容都返回一个字符串向量。

+0

开始赏金,因为我遇到了对此功能的需求,而我以前的回答是不够的。 – 2010-12-05 18:55:28

回答

3

你试过positional options

#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

相关问题