2011-11-15 9 views
5

Có cách nào dễ dàng để tách tùy chọn trợ giúp khỏi các tùy chọn chương trình 'thực' không? Trên thực tế, có thể xác định thứ bậc của các tùy chọn, a la BNF:boost program_options: trợ giúp so với các tùy chọn có ý nghĩa

options := help_options | program_options 
help_options := '-h' 
program_options := '-m1' mode1options | '-m2' mode2options 
mode1options := number 
... 

Hoặc có cách nào tốt hơn để đạt được điều này? Tôi có nên trở lại tinh thần không?

Trả lời

7

Tài liệu mô tả cách tách tùy chọn bên dưới tiêu đề Option Groups and Hidden Options. Nó thể hiện việc xác định nhiều options_description đối tượng và sau đó sử dụng một nhóm all cho phân tích cú pháp dòng lệnh, nhưng một nhóm visible cho tài liệu hiển thị:

// Declare an options description instance which will include 
// all the options 
options_description all("Allowed options"); 
all.add(general).add(gui).add(backend); 

// Declare an options description instance which will be shown 
// to the user 
options_description visible("Allowed options"); 
visible.add(general).add(gui); 

variables_map vm; 
store(parse_command_line(ac, av, all), vm); 

if (vm.count("help")) 
{ 
    cout << visible; 
    return 0; 
} 

Mặc dù thư viện Program_options cho phép bạn tùy chỉnh một số cú pháp (xem Non-conventional SyntaxCustom Validators) , nó không cung cấp cách xác định ngữ pháp tùy chỉnh. Nếu bạn muốn xác định ngữ pháp của dòng lệnh, hãy sử dụng một công cụ khác.

+0

cảm ơn! Bằng cách nào đó tôi đọc qua cách này ... – xtofl