Come si inseriscono manualmente le opzioni in boost.Program_options?
-
20-08-2019 - |
Domanda
Ho un'applicazione che utilizza Boost.Program_options per archiviare e gestire le sue opzioni di configurazione. Attualmente ci stiamo allontanando dai file di configurazione e invece utilizziamo la configurazione caricata dal database. Ho scritto un'API che legge le opzioni di configurazione dal database in base al nome host e al nome dell'istanza. (fantastico!) Tuttavia, per quanto posso vedere, non c'è modo di inserire manualmente queste opzioni nel boost Program_options. Qualcuno l'ha mai usato prima, qualche idea? I documenti di boost sembrano indicare che l'unico modo per ottenere cose in quella mappa è tramite la funzione store, che legge dalla riga di comando o dal file di configurazione (non quello che voglio). Fondamentalmente alla ricerca di un modo per inserire manualmente i valori letti DB nella mappa.
Soluzione
La mia risposta arriva un po 'troppo tardi, ma ho passato un po' di tempo a provare a fare qualcosa di simile e ho trovato una soluzione fastidiosamente ovvia (nel caso in cui qualcun altro lo stia cercando) ...
Ricordando che boost::program_options::variables_map
deriva da std::map<std::string, boost::program_options::variable_value>
, puoi eseguire un'elaborazione perfettamente legale delle mappe STL incluso un inserto ...
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-
Altri suggerimenti
Hai esaminato le funzioni extra_parser
o allow_unregistered
di Boost::Program_Options
? A seconda di come funziona esattamente il tuo programma, uno o entrambi dovrebbero essere in grado di supportare ciò che desideri.