2010-07-29 54 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

相關問題