2013-01-02 22 views
16

Khi bạn sử dụng Boost thư viện program_options nó là rất dễ dàng để in giúp đỡ cho chương trình của bạn:Print giúp đỡ cho cả args bình thường và vị trí với boost :: program_options

boost::program_options::variables_map options; 
boost::program_options::options_description optionsDesc; 
boost::program_options::positional_options_description positionalOptionsDesc; 
//... 
if(options.count("help")) 
{ 
    cerr << optionsDesc << endl; 
} 

Nhưng làm thế nào để bạn thêm các tùy chọn từ positional_options_description để tin nhắn trợ giúp? Trong hướng dẫn tôi có thể thấy kết quả của ví dụ thiết lập, ở phần cuối của phần này:

http://www.boost.org/doc/libs/1_52_0/doc/html/program_options/tutorial.html#id2607297

Tùy chọn input-file được in trong sự giúp đỡ và nó là vị trí. Nhưng tôi không thể nhìn thấy mã. Có cách tích hợp để in nó, như với options_description hoặc bạn phải thực hiện thủ công? Rõ ràng << không làm việc cho positional_options_description, lỗi biên soạn là:

error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ 
+3

Nếu được, bạn có thể tìm mã đầy đủ [ở đây] (http://www.boost.org/libs/program_options/example/options_description.cpp). –

+0

Cảm ơn llonesmiz, nó thực sự đã giúp rất nhiều! Mặc dù vậy, tôi không phải thêm các tham số vị trí vào 'options_description' nếu tôi thêm chúng vào' positional_options_description', nhưng bạn phải thêm vào cả hai. – nuoritoveri

Trả lời

5

Chú ý rằng streaming mô tả chỉ in ra các tùy chọn. Nó không in tên của chương trình hoặc mô tả thực tế về những gì chương trình làm. Bạn nên tự in bất kỳ tham số vị trí bạn có như là một phần của thông điệp đầu ra:

Thay vì

if (vm.count("help")) { 
    cout << "Usage: options_description [options]\n"; 
    cout << desc; 
    return 0; 
} 

Bạn có thể dễ dàng nói

if (vm.count("help")) { 
    cout << "Usage: " << argv[0] << " [options] <description of positional 1> <description of positional 2> ...\n"; 
    cout << desc; 
    return 0; 
} 
+0

Như tôi đã nói trong phần bình luận cho câu hỏi tôi đã không thêm arg vị trí của mình vào 'options_description', chỉ với' positional_options_description'. Đó là lý do tại sao nó không được in. Nó thường làm, vì vậy mã của bạn làm những gì tôi muốn, tôi chỉ làm sai ở nơi khác. Tôi cũng đồng ý nó là tốt đẹp để in việc sử dụng trong đầu. – nuoritoveri

1

Có xem xét tăng :: program_options :: positional_options_description.name_for_position (i)

Thông báo lỗi là một cái gì đó không liên quan, tôi quên những điều eactly cần làm với cpp11