Wie fügen Sie manuell Optionen in boost.Program_options?
-
20-08-2019 - |
Frage
Ich habe eine Anwendung, die Boost.Program_options zu speichern und verwalten ihre Konfigurationsoptionen verwendet. Wir bewegen sich zur Zeit von Konfigurationsdateien entfernt und stattdessen Datenbank geladen Konfiguration. Ich habe eine API geschrieben, die Konfigurationsoptionen aus der Datenbank von Hostnamen und Instanznamen liest. (Cool!) Aber soweit ich es keine Möglichkeit sehen kann, ist manuell diese Optionen in die Boost-Program_options einzufügen. Hat jemand dies vor, irgendwelche Ideen verwendet? Die docs von boost scheinen den einzigen Weg, um anzuzeigen, Zeug zu bekommen, dass Karte durch die Speicherfunktion ist, das entweder liest von der Befehlszeile oder Config-Datei (nicht das, was ich will). Grundsätzlich Suche nach einer Möglichkeit, manuell die DB einfügen lesen Werte in der Karte.
Lösung
Meine Antwort kommt ein wenig zu spät, aber ich habe etwas ähnliches und gefunden zu tun, um eine annoyingly offensichtliche Lösung einige Zeit versucht (Incase jemand anderes für diese suchen) ...
, dass boost::program_options::variables_map
unter Hinweis ergibt sich aus std::map<std::string, boost::program_options::variable_value>
, können Sie völlig legal STL Karte Verarbeitung tun mit einem Einsatz ...
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-
Andere Tipps
Haben Sie sich den extra_parser
oder allow_unregistered
Funktionen von Boost::Program_Options
? Je nach genau, wie Ihr Programm arbeitet, einer von ihnen oder beide sollten in der Lage sein, zu unterstützen, was Sie wollen.