如何手动将选项插入boost.Program_options?

时间:2009-05-08 19:35:15

标签: c++ configuration boost-program-options

我有一个使用Boost.Program_options来存储和管理其配置选项的应用程序。我们目前正在远离配置文件并使用数据库加载配置。我编写了一个API,通过主机名和实例名从数据库中读取配置选项。 (很酷!)但是,据我所知,没有办法手动将这些选项插入到boost Program_options中。有没有人用过这个,有什么想法吗?来自boost的文档似乎表明在该映射中获取内容的唯一方法是使用store函数,该函数可以从命令行或配置文件中读取(不是我想要的)。基本上寻找一种手动将DB读取值插入到地图中的方法。

2 个答案:

答案 0 :(得分:17)

我的回答有点太晚了,但是我花了一些时间尝试做类似的事情并找到一个令人讨厌的明显解决方案(其他人正在寻找这个)......

回顾boost::program_options::variables_map来自std::map<std::string, boost::program_options::variable_value>,您可以完成合法的STL地图处理,包括插入......

namespace po = boost::program_options;
po::variables_map vm;
vm.insert(std::make_pair("MyNewEmptyOption", po::variable_value());
vm.insert(std::make_pair("MyNewIntOption", po::variable_value(32, false));
po::notify(vm);

-Edmond-

答案 1 :(得分:3)

您是否查看了extra_parser的{​​{1}}或allow_unregistered函数?根据程序的确切运作方式,其中一个或两个应该能够支持您想要的内容。