У меня есть приложение, которое использует Boost.Program_options для хранения и управления параметрами конфигурации. В настоящее время мы удаляемся от файлов конфигурации и используем конфигурацию, загруженную в базу данных. Я написал API, который считывает параметры конфигурации из базы данных по имени хоста и имени экземпляра. (cool!) Однако, насколько я вижу, нет способа вручную вставить эти опции в boost Program_options. Кто-нибудь использовал это раньше, какие-то идеи? Документы из boost, похоже, указывают, что единственный способ получить материал на этой карте - это функция store, которая либо читается из командной строки, либо из файла конфигурации (не то, что я хочу). В основном ищет способ вручную вставить значения чтения DB в карту.
Как вы вручную вставляете опции в boost.Program_options?
Ответ 1
Мой ответ наступает слишком поздно, но я потратил некоторое время на попытку сделать что-то подобное и нашел назойливое очевидное решение (если кто-то еще ищет это)...
Вспоминая, что 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-
Ответ 2
Вы просмотрели функции extra_parser
или allow_unregistered
Boost::Program_Options
? В зависимости от того, как работает ваша программа, один или оба из них должны иметь возможность поддерживать то, что вы хотите.