解析Boost program_options中配置文件的未注册选项
Parsing unregistered options for config files in Boost program_options?
使用命令行选项,我可以做以下操作:
po::variables_map vm;
auto parsedOptions = po::command_line_parser(argc, argv).options(optionsDescription1).allow_unregistered().run();
po::store(parsedOptions, vm);
po::notify(vm);
auto unregistered = po::collect_unrecognized(parsedOptions.options, po::include_positional);
po::variables_map vm2;
auto parsedOptions2 = po::command_line_parser(unregistered).options(optionsDescription2).run();
po::store(parsedOptions2, vm2);
po::notify(vm2);
这很好地工作,因为collect_unregistered()
收集命令行令牌,就像它在命令行中出现的那样。但是,它不适用于配置文件。我可以解析一个允许未注册选项的配置文件,但是当我收集未注册选项时,我得到一个我不能使用的结果。
po::variables_map vm;
auto parsedOptions = po::parse_config_file<char>(filename, optionsDescription1, true);
po::store(parsedOptions, vm);
po::notify(vm);
auto unregistered = po::collect_unrecognized(parsedOptions.options, po::include_positional);
在本例中,我得到列出的选项的名称和值。例如,如果配置文件包含以下选项:
unregistered_option1=value1
unregistered_option2=value2
然后我在字符串向量unregistered
中得到unregistered_option1
, value1
, unregistered_option2
, value2
的值。Boost的解析器不能对这种格式做任何有用的事情。是否有任何方法来解析这个列表(即解析所有未被第一个options_description
与不同的options_description
识别的选项)?当然,我可以用第二个options_description
和allow_unregistered
集再次解析文件,但这样我就不能检查两个描述中未知的选项。
您不必依赖collect_unrecognized()
返回值的不完善,您始终可以自己检测,处理和重建选项,因为parse_config_file()
保留了对未知选项的观察关系:
auto parsed_options = parse_config_file(ifs, config_file_options, true);
store(parsed_options, vm);
...
for (const auto& o : parsed_options.options) {
if (vm.find(o.string_key) == vm.end()) {
// an unknown option
cout << o.string_key << "=" << o.value << "n";
}
}
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- 无法将结构注册为增强几何体3D点
- C/C++预处理器是否可以检测一些编译器选项
- 如何使用AngelScript注册SFML Vector2运算符
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 通过选项卡的文本设置QTabWidget顺序
- 在遍历处理程序的向量时注册和注销处理程序
- 有没有任务栏API可以立即应用注册表更改
- 通过ccmake在cmake中缓存依赖选项
- 使用QJsEngine在Qt中注册自定义类型
- 如何传递多个 std::文件系统选项?
- 基于编译器选项的编译二进制路径
- 检查注册表项是否链接到(或副本)另一个注册表项
- 如何使用 TStyleManager::UnRegisterStyle() 取消注册样式
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- 在QT中注册iOS默认用户首选项
- 注册表调用的效率vs.将用户选项存储在静态变量中
- 解析Boost program_options中配置文件的未注册选项