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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top