2009-05-08 6 views
11

Ich habe eine Anwendung, die Boost.Program_options verwendet, um ihre Konfigurationsoptionen zu speichern und zu verwalten. Wir entfernen uns gerade von den Konfigurationsdateien und verwenden stattdessen die Konfiguration mit Datenbank. Ich habe eine API geschrieben, die Konfigurationsoptionen aus der Datenbank nach Hostnamen und Instanznamen liest. (cool!) Soweit ich sehen kann, gibt es keine Möglichkeit, diese Optionen manuell in den Boost Program_options einzufügen. Hat jemand das schon mal genutzt, irgendwelche Ideen? Die Docs von Boost zeigen an, dass die einzige Möglichkeit, Sachen in dieser Map zu bekommen, die Store-Funktion ist, die entweder von der Kommandozeile oder der Konfigurationsdatei liest (was ich nicht will). Suchen Sie nach einer Möglichkeit, die DB-Werte manuell in die Karte einzufügen.Wie fügen Sie manuell Optionen in boost.Program_options ein?

+0

ich ein Zeichen der Formatierung keine gute Möglichkeit, diese kurz zu tun ** gefunden habe, als ob es sich um eine Kommandozeilenparameter. Wenn jemand etwas findet, lass es mich wissen! – Alex

Antwort

13

Meine Antwort kommt ein wenig zu spät, aber ich habe etwas ähnliches und fand einige Zeit versucht, eine annoyingly offensichtliche Lösung zu tun (incase jemand anderes für diese Suche) ...

Hinweis darauf, dass boost::program_options::variables_map von std::map<std::string, boost::program_options::variable_value> ableitet Sie können mit einem Einsatz vollkommen legal STL Karte Verarbeitung tun ...

 
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

Sieht nicht so aus, als ob program_options von std :: map zu mir erbt. Ich sehe es abgeleitet von: abstract_variables_map. Hab noch nicht ausgecheckt, ob das noch eine überarbeitete std :: map ist. – Alex

+0

Ausgezeichnete Lösung! – russoue

+0

@Alex, erbt von [beiden] (http://www.boost.org/doc/libs/1_55_0/boost/program_options/variables_map.hpp). – russoue

3

Haben Sie sich die extra_parser oder allow_unregistered Funktionen von Boost::Program_Options angesehen? Abhängig davon, wie genau Ihr Programm arbeitet, sollten einer oder beide in der Lage sein, das zu unterstützen, was Sie wollen.

Verwandte Themen