У меня есть приложение, которое использует Boost.Program_options для хранения параметров конфигурации и управления ими. В настоящее время мы отказываемся от файлов конфигурации и вместо этого используем конфигурацию, загружаемую из базы данных. Я написал API, который считывает параметры конфигурации из базы данных по имени хоста и имени экземпляра. (круто!) Однако, насколько я понимаю, нет возможности вручную вставить эти параметры в файл boost Program_options. Кто-нибудь использовал это раньше, есть идеи? Документы из boost, похоже, указывают, что единственный способ получить данные на этой карте — это функция хранилища, которая либо считывается из командной строки, либо из файла конфигурации (не то, что я хочу). В основном ищем способ вручную вставить значения чтения БД на карту.
Как вручную вставить параметры в boost.Program_options?
comment
Я не нашел хорошего способа сделать это, кроме форматирования char **, как если бы это был параметр командной строки. Если кто-то найдет что-то, дайте мне знать!
- person Alex   schedule 21.05.2009
Ответы (2)
Мой ответ приходит слишком поздно, но я потратил некоторое время, пытаясь сделать что-то подобное, и нашел раздражающе очевидное решение (если кто-то еще ищет это)...
Вспоминая, что 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);
-Эдмонд-
person
Edmond Begumisa
schedule
22.04.2010
Мне не кажется, что program_options наследуется от std::map. Я вижу, что это получено из: abstract_variables_map. Еще не проверял, является ли это переработанным std::map.
- person Alex; 22.04.2010
@Alex, он наследуется от обоих.
- person russoue; 25.04.2014
Хороший! Любопытно, почему
vm["MyNewIntOption"] = po::variable_value(32, false);
не сработало, когда я попробовал это? Есть кое-что об отбрасывании квалификатора const
.
- person Claudiu; 08.08.2014
Я думаю, что в вашем примере отсутствует вызов
store
. Не могли бы вы включить это, пожалуйста?
- person quant; 14.06.2016
Вы смотрели на extra_parser
или allow_unregistered
функции Boost::Program_Options
? В зависимости от того, как именно работает ваша программа, одна или обе из них должны поддерживать то, что вы хотите.
person
Head Geek
schedule
11.05.2009