【发布时间】:2019-06-13 04:00:40
【问题描述】:
我目前正在尝试在我的模拟中实现 boost::program_options 库。在读取(许多)参数时,我想做这样的事情
namespace po = boost::program_options;
po::options_description desc("Allowed options");
desc.add_options()
("option1", po::value<int>(&int1), "set value for option1")
("option2", po::value<int>(&int2)->default_value(int1), "set value for option2, default is option1")
;
问题:default_value(int1) 不使用提供的 int1,如果同时给出两个选项(根据命令行或配置文件),而是使用 notify() 之前的值。
我知道问题可以通过简单地检查是否提供了 option2 并稍后分配默认值来解决。问题是,我想避免使用更简洁的解决方案为约 30 个参数编写此 IF 语句。
如果需要,这是 program_option 代码的其余部分
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
if (vm.count("config")) {
std::ifstream cfs(config_file, std::ifstream::in);
po::store(po::parse_config_file(cfs, desc), vm);
po::notify(vm);
}
“config”选项将 config_file 路径作为参数。
【问题讨论】:
标签: c++ default-value boost-program-options