gpt4 book ai didi

c++ - 如何解析配置文件中的 bool 选项

转载 作者:太空狗 更新时间:2023-10-29 21:20:22 25 4
gpt4 key购买 nike

使用 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.");

最佳答案

我目前正在使用 Boost 1.58,并且在配置文件中支持 bool 开关选项工作得很好。

配置文件(config.cfg):

log=ON

代码:

#include <fstream>
#include <boost/program_options.hpp>
#include <iostream>

namespace prog_opts = boost::program_options;

//Notified function
void option_verbose(bool opt) {
std::cout << "Log ";
if (opt)
std::cout << "ON";
else
std::cout << "OFF";

std::cout << "\n";
}

int main (int argc, char* argv[]) {

prog_opts::options_description general("Options");

general.add_options()
("log", prog_opts::bool_switch()->notifier(&option_verbose), "logging")
;

// Assign the CLI args to the map
prog_opts::variables_map cli_map;

const prog_opts::basic_parsed_options< char >& cliopts = prog_opts::command_line_parser(argc, argv).options(general).run();

prog_opts::store(cliopts , cli_map);

// Get options from config
std::ifstream infile("config.cfg", std::ifstream::in);
store(parse_config_file(infile, general), cli_map);

notify(cli_map);
}

从使用这个来看,行为似乎是:

  1. 如果您的选项出现在命令行中,那么它会覆盖配置文件。
  2. 如果命令行中没有您的选项,则使用配置文件选项值。

在配置文件中 log=ON 的示例代码中,该选项将始终为 ON。将其设置为 OFF 后,该选项将仅在使用选项 --log 运行您的应用程序时启用。

希望这对您有所帮助。

关于c++ - 如何解析配置文件中的 bool 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com