Как вручную вставить параметры в boost.Program_options? - PullRequest
13 голосов
/ 08 мая 2009

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

Ответы [ 2 ]

17 голосов
/ 22 апреля 2010

Мой ответ приходит слишком поздно, но я потратил некоторое время, пытаясь сделать что-то подобное, и нашел раздражающе очевидное решение (если кто-то еще ищет это) ...

Напоминая, что 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-

3 голосов
/ 11 мая 2009

Вы смотрели на extra_parser или allow_unregistered функции Boost::Program_Options? В зависимости от того, как именно работает ваша программа, один или оба из них должны поддерживать то, что вы хотите.

...