2010-07-29 5 views
5

Có cách nào để thu thập tất cả các giá trị sau một đối số được chỉ định với tăng :: program_options không? Tuy nhiên, có hai điều cần lưu ý là tôi cần phải chấp nhận các đối số không được công nhận và tôi cần phải chấp nhận các giá trị có thể chứa dấu gạch ngang. Tôi đã thử chơi xung quanh với command_line_parser vs parse_command_line và tôi có thể nhận được hoặc không được công nhận hoặc giá trị có chứa dấu gạch ngang, nhưng không phải cả hai.boost program_options chấp nhận tất cả các giá trị sau cờ cuối

Ví dụ: ./myprog Ignore1 Ignore2 --Accept 1 --AlsoAccept 2 --AcceptAll 1 2 -3 4

Tôi không thực sự quan tâm đến xác minh rằng --AcceptAll là cờ cuối cùng thông qua; Tôi chỉ đang tìm kiếm logic trả về một chuỗi các chuỗi cho mọi thứ sau lá cờ đó.

+0

Bắt đầu một tiền thưởng vì tôi đã gặp phải nhu cầu về chức năng này và câu trả lời trước của tôi là không đủ. –

Trả lời

3

bạn đã thử positional options chưa?

#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; 
} 

phiên mẫu

[email protected] ~> ./a.out --foo bar far hello world how are you 
far 
hello 
world 
how 
are 
you 
[email protected] ~> 
+0

Giải pháp đó không cho phép tôi bỏ qua các đối số cũng như không cho phép đối số bằng dấu '-'. – sfpiano