9

dato la seguente semplice utilizzo di Boost.Program_Options:Boost.Program_Options: Quando <bool> è specificato come opzione della riga di comando, quali sono i parametri validi della riga di comando?

boost::program_options::options_description options("Options"); 

options.add_options() 

    ("my_bool_flag,b", boost::program_options::value<bool>(), "Sample boolean switch)") 

    ; 

... quali argomenti della riga di comando valuterà a false, e cosa true?

(Ie, assumere il programma si chiama "pippo", ed eseguito sulla riga di comando come: foo -b ? ... con il punto interrogativo un segnaposto per qualche altro testo: Quali sono tutte le possibili opzioni per il testo che sarà correttamente valutare a false, e cosa true)

risposta

19

Guardando $ (BOOST_ROOT) /libs/program_options/src/value_semantic.cpp si possono trovare:?

/* Validates bool value. 
    Any of "1", "true", "yes", "on" will be converted to "1".<br> 
    Any of "0", "false", "no", "off" will be converted to "0".<br> 
    Case is ignored. The 'xs' vector can either be empty, in which 
    case the value is 'true', or can contain explicit value. 
*/ 
BOOST_PROGRAM_OPTIONS_DECL void validate(any& v, const vector<string>& xs, 
        bool*, int) 
{ 
    check_first_occurrence(v); 
    string s(get_single_string(xs, true)); 

    for (size_t i = 0; i < s.size(); ++i) 
     s[i] = char(tolower(s[i])); 

    if (s.empty() || s == "on" || s == "yes" || s == "1" || s == "true") 
     v = any(true); 
    else if (s == "off" || s == "no" || s == "0" || s == "false") 
     v = any(false); 
    else 
     boost::throw_exception(invalid_bool_value(s)); 
} 
Problemi correlati