11

Boost.Program_Optionsの次の簡単な使用法を考えます。

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ますか? )。

4

1 に答える 1

23

$(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));
}
于 2013-03-26T08:52:01.790 に答える