2009-05-08 11 views
11

Mam aplikacji, która używa Boost.Program_options do przechowywania i zarządzania jej opcje konfiguracyjne. W tej chwili odchodzimy od plików konfiguracyjnych i zamiast tego używamy konfiguracji ładowanej przez bazę danych. Napisałem interfejs API odczytujący opcje konfiguracyjne z bazy danych według nazwy hosta i nazwy instancji. (fajnie!) Jednak, o ile widzę, nie ma możliwości ręcznego wstawienia tych opcji do opcji boost Program_options. Czy ktoś kiedyś to użył, jakieś pomysły? Dokumenty z doładowania wydają się wskazywać, że jedynym sposobem na uzyskanie rzeczy na tej mapie jest funkcja sklepu, która albo czyta z wiersza poleceń, albo z pliku konfiguracyjnego (nie tego, czego chcę). Zasadniczo szuka sposobu ręcznego wstawienia wartości odczytu DB na mapę.Jak ręcznie wstawiać opcje do opcji boost.Program_opcji?

+0

znalazłem żadnego dobrego sposobu robi ten krótki formatowania char ** a jeśli jest to parametr linii poleceń. Jeśli ktoś znajdzie coś, daj mi znać! – Alex

Odpowiedz

13

Moja odpowiedź przychodzi zbyt późno, ale spędziłem trochę czasu, próbując zrobić coś podobnego i znalazł irytująco oczywiste rozwiązanie (nie rozczarować ktoś szuka tego) ...

boost::program_options::variables_map przypominając, że wywodzi się z std::map<std::string, boost::program_options::variable_value> można zrobić całkowicie legalne przetwarzanie STL mapę w tym wkładki ...

 
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

Wygląda na to, że program_options nie dziedziczy ze std :: map do mnie. Widzę, że pochodzi z: abstract_variables_map. Nie sprawdziłem, czy jest to ponownie opracowana opcja std :: map. – Alex

+0

Doskonałe rozwiązanie! – russoue

+0

@Alex, dziedziczy po [obu] (http://www.boost.org/doc/libs/1_55_0/boost/program_options/variables_map.hpp). – russoue

3

Czy obejrzałeś funkcje extra_parser lub allow_unregistered z Boost::Program_Options? W zależności od tego, jak działa twój program, jeden lub obaj powinni być w stanie wesprzeć to, co chcesz.

Powiązane problemy