Как вы вручную вставляете опции в boost.Program_options?

У меня есть приложение, которое использует Boost.Program_options для хранения и управления параметрами конфигурации. В настоящее время мы удаляемся от файлов конфигурации и используем конфигурацию, загруженную в базу данных. Я написал API, который считывает параметры конфигурации из базы данных по имени хоста и имени экземпляра. (cool!) Однако, насколько я вижу, нет способа вручную вставить эти опции в boost Program_options. Кто-нибудь использовал это раньше, какие-то идеи? Документы из boost, похоже, указывают, что единственный способ получить материал на этой карте - это функция store, которая либо читается из командной строки, либо из файла конфигурации (не то, что я хочу). В основном ищет способ вручную вставить значения чтения DB в карту.

Ответ 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? В зависимости от того, как работает ваша программа, один или оба из них должны иметь возможность поддерживать то, что вы хотите.