2010-04-07 30 views
12
dụ

Rất đơn giản:boost :: program_options lỗi hoặc tính năng?

 


#include <string> 
#include <boost/program_options.hpp> 

namespace po = boost::program_options; 

int main(int argc, char* argv[]) 
{ 
    po::options_description recipients("Recipient(s)"); 
    recipients.add_options() 
     ("csv",   po::value<std::string>(),  "" ) 
     ("csv_name", po::value<unsigned>(),  "" ) 
    ; 

    po::options_description cmdline_options; 
    cmdline_options.add(recipients); 

    po::variables_map vm; 
    po::store(po::command_line_parser(argc, argv).options(cmdline_options).run(), vm); 
    po::notify(vm); 

    return 0; 
} 

 

Và một số xét nghiệm:

 

>Test --csv test 
in option 'csv_name': invalid option value 

>Test --csv_name test 
in option 'csv_name': invalid option value 

>Test --csv_name 0 

>Test --csv text 
in option 'csv_name': invalid option value 

>Test --csv 0 

>Test --csv_name 0 

>Test --csv_name 0 --csv text 
multiple occurrences 
 

Hình như rằng mối đe dọa tăng :: program_option tham số "csv" là "csv_name".
Đây có phải là một tính năng hoặc lỗi không?

Trả lời

9

Có, đây là "tính năng" do phân tích cú pháp tùy chọn mặc định style. Hãy thử với các tùy chọn ngắn, như:

recipients.add_options() 
    ("csv,c",  po::value<std::string>(), "" ) 
    ("csv_name,C", po::value<unsigned>(), "" ) 
; 

Hoặc chơi với phương thức basic_command_line_parser::style(int). Tôi đã không thử điều này, vì vậy YMMV.

+4

Tôi đã đúng. parser.style (po :: command_line_style :: default_style^po :: command_line_style :: allow_guessing); cứu tôi. Cảm ơn. – Dmitriy

5

Tôi sợ đây là lỗi. Nhưng, nó phải được sửa trong 1,42 - bạn đã thử phiên bản nào?

+1

Tôi đang sử dụng Phiên bản 1.42.0. Như tôi đã nói parser.style (po :: command_line_style :: default_style^po :: command_line_style :: allow_guessing); cứu tôi. – Dmitriy

+0

Xin chào Vladimir. Rất vui khi thấy tác giả trả lời thư viện :) Bạn nghĩ lỗi nào là/là - kiểu phân tích cú pháp mặc định? –

+1

Không, kiểu mặc định là tốt. Tuy nhiên, nếu bạn có hai tùy chọn, một tùy chọn có tên là "csv" và tên khác là "csv_name" và dòng lệnh có "--csv", thì sẽ hợp lý để phù hợp với đối sánh gần đúng. Tôi tin rằng bản sửa lỗi này là: https://svn.boost.org/trac/boost/changeset/59744 –

Các vấn đề liên quan