2010-05-26 24 views
6

Tôi đang sử dụng tăng :: program_options như thế này:Có thể tăng :: program_options Sử dụng dấu phân cách khác "-"?

namespace po = boost::program_options; 
po::options_description desc("Options"); 
desc.add_options() 
    ("help,?", "Show Options") 
    ("capture-file,I", po::value<string>(), "Capture File") 
    ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format") 
    ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File"); 

po::variables_map vm; 
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm); 

Nếu tôi vượt qua các tham số dòng lệnh -I hithere nó hoạt động, nhưng nó tôi vượt qua /I hithere tăng ném một boost::bad_any_cast với một what() của "Không chuyển sang sử dụng tăng :: any_cast ".

Có thể sử dụng program_options để phân tích cú pháp / -delimitted hoặc - tùy chọn được kết nối không? Câu hỏi bổ sung, nó có thể được cấu hình để /- đặt cùng một tùy chọn, nhưng là đối lập nhị phân của nhau không? Ví dụ: /verbose có thể có nghĩa là ghi nhật ký chi tiết trong khi -verbose có thể có nghĩa là ghi nhật ký chi tiết hơn.

Trả lời

9

Để sử dụng /-, sử dụng command_line_parser 's style() phương pháp với sự kết hợp thích hợp của style_t cờ. Ví dụ:

po::store(po::command_line_parser(ac, av) 
    .options(desc) 
    .style(po::command_line_style::default_style 
     | po::command_line_style::case_insensitive 
     | po::command_line_style::allow_slash_for_short 
     | po::command_line_style::allow_long_disguise) 
    /*.positional(pd)*/ 
    .run(), vm); 

(allow_long_disguise phép / bắt đầu một lựa chọn dài.)

Bạn có thể có thể làm cho /- đối lập bằng cách thêm của riêng bạn additional parser; tuy nhiên, điều này sẽ rất không chuẩn và do đó có khả năng gây nhầm lẫn cho người dùng cuối, vì vậy tôi không chắc đó là một ý tưởng hay.

+0

Có lẽ bạn đang đúng. Có thể xác định dấu phân cách nào được sử dụng sau khi gọi đến 'lưu trữ' không? –

+0

Trừ khi bạn đang sử dụng trình phân tích cú pháp bổ sung của riêng mình, tôi không nghĩ vậy. –

+0

OK, đó là một câu hỏi tiền thưởng. :) –

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