2010-04-07 19 views
12

Çok basit bir örnek:boost :: program_options hatası veya özelliği var mı?

 


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

 

Ve bazı testler:

 

>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 
 

"csv_name" gibi boost :: program_option tehditler parametresi "csv" benziyor.
Bu bir özellik mi yoksa hata mı?

cevap

9

Evet, bu, style'u ayrıştıran varsayılan seçenekler nedeniyle bir "özellik" dır. gibi kısa seçenekleri ile deneyin:

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

Ya basic_command_line_parser::style(int) yöntemi ile oynarlar. Bunu denemedim, YMMV.

+4

Haklıyım. parser.style (po :: command_line_style :: default_style^po :: command_line_style :: allow_guessing); bana yardım et. Teşekkürler. – Dmitriy

5

Korkarım ki bu bir hatadır. Ancak, 1.42'de düzeltilmeli - hangi sürümle denediniz?

+1

Sürüm 1.42.0 kullanıyorum. Zaten parser.style dediğim gibi (po :: command_line_style :: default_style^po :: command_line_style :: allow_guessing); bana yardım et. – Dmitriy

+0

Merhaba Vladimir. Yazarın kütüphaneye cevap verdiğini görmek güzeldi :) Sizce bu hata// - varsayılan ayrıştırma stili? –

+1

Hayır, varsayılan stil iyi. Ancak, iki seçeneğiniz varsa, biri "csv" ve başka bir "csv_name" ve komut satırında "--csv" varsa, tam eşleşmeyi yaklaşık bir eşleşme için tercih etmeniz makul olacaktır. Düzeltmenin şu olduğuna inanıyorum: https://svn.boost.org/trac/boost/changeset/59744 –

İlgili konular