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