【发布时间】:2014-09-02 07:18:18
【问题描述】:
使用 boost 1_55,我有一个 bool_switch() 选项,定义为:
bpo::options_description opts;
opts->add_options()
("foo", bpo::bool_switch(), "Enable foo.");
opts_map = new bpo::variables_map;
并在命令行中解析:
bpo::store(bpo::parse_command_line(argc, argv, opts), *opts_map);
并且还通过以下方式在配置文件中解析:
ifstream ifs("foo.conf");
if (ifs.good()) {
bpo::store(bpo::parse_config_file(ifs, opts), *opts_map);
close(ifs);
}
问题在于,无论是否指定--foo,它都可以在命令行上正常工作,但是当我将其放入配置文件时,它始终是false(带有second.defaulted() == true)。我在配置文件中尝试了以下内容:
foo
foo=true
foo=1
其他类型的选项(例如 bpo::value<ANYTYPE>() 有或没有 composing())在命令行和配置文件中都可以正常工作,只有 bool_switch() 选项不起作用。
知道我做错了什么吗?或者您不能将bool_switch() 选项与parse_config_file() 一起使用吗?
编辑:
一种解决方法是将value() 类型与default_value() 和implicit_value() 一起使用:
opts->AddOptions()("foo", bpo::value<bool>()->default_value(false)->implicit_value(true), "Enable foo.");
【问题讨论】:
标签: c++ parsing ini boost-program-options