9

Учитывая следующее простое использование Boost.Program_Options:Boost.Program_Options: Когда <bool> указан как параметр командной строки, каковы допустимые параметры командной строки?

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

options.add_options() 

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

    ; 

... что аргументы командной строки будут оценивать в false, а что true?

(Т.е., предположит, что программа называется «Foo», и выполняются в командной строке как: foo -b ? ... с вопросительным знаком заполнителя для какого-либо другого текста: Каковы все возможные варианты текста, которые будут правильно вычисляться false, и что true)

ответ

19

Глядя на $ (BOOST_ROOT) /libs/program_options/src/value_semantic.cpp вы можете найти:

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

 Смежные вопросы

  • Нет связанных вопросов^_^