2009-05-08 4 views
11

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

+0

Я никогда не нашел хороший способ сделать это короткий форматирования полукокса **, как если бы это параметр командной строки. Если кто-то найдет что-то, дайте мне знать! – Alex

ответ

13

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

boost::program_options::variables_map Напоминая, что происходит от std::map<std::string, boost::program_options::variable_value> вы можете сделать обработку совершенно правовую СТЛ карту включая вставки ...

 
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-

+1

Не похоже, что program_options наследует от std :: map для меня. Я вижу, что это происходит из: abstract_variables_map. Не проверено, если это еще раз обновленная std :: map. – Alex

+0

Отличное решение! – russoue

+0

@Alex, он наследует [оба] (http://www.boost.org/doc/libs/1_55_0/boost/program_options/variables_map.hpp). – russoue

3

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

Смежные вопросы