9

Biorąc pod uwagę następujące proste użycie Boost.Program_Options:Boost.Program_Options: Kiedy <bool> jest określona jako opcja wiersza polecenia, jakie są prawidłowe parametry wiersza polecenia?

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

options.add_options() 

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

    ; 

... co wiersza polecenia argumenty zostanie skonwertowany do false, i co true?

(czyli zakładamy, że program o nazwie „foo” i stracony w linii poleceń jak: foo -b ? ... z pytaniem oznaczyć zastępczy dla jakiegoś innego tekstu: Jakie są wszystkie możliwe opcje, które będą właściwie tekstowe ocenia się false, a co true)

Odpowiedz

19

Patrząc na $ (BOOST_ROOT) /libs/program_options/src/value_semantic.cpp można znaleźć:

/* 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)); 
}