2009-05-08 11 views
11

Tengo una aplicación que usa Boost.Program_options para almacenar y administrar sus opciones de configuración. Actualmente, nos alejamos de los archivos de configuración y usamos la configuración cargada en la base de datos. Escribí una API que lee las opciones de configuración de la base de datos por nombre de host y nombre de instancia. (¡genial!) Sin embargo, hasta donde puedo ver, no hay forma de insertar manualmente estas opciones en el impulso Program_options. Alguien ha usado esto antes, alguna idea? Los documentos de boost parecen indicar que la única forma de obtener material en ese mapa es mediante la función de almacenamiento, que puede leer desde la línea de comando o el archivo de configuración (no es lo que quiero). Básicamente, busca una forma de insertar manualmente los valores de lectura de DB en el mapa.¿Cómo insertar opciones manualmente en boost.Program_options?

+0

he encontrado ninguna buena manera de hacer este corto de formatear un char ** como si se trata de una parámetro de línea de comandos. ¡Si alguien encuentra algo, házmelo saber! – Alex

Respuesta

13

Mi respuesta llega un poco tarde, pero pasó algún tiempo tratando de hacer algo similar y se encontró una solución molestamente obvio (en caso que cualquier otra persona está buscando para esto) ...

Recordando que boost::program_options::variables_map deriva de std::map<std::string, boost::program_options::variable_value> , que puede hacer el proceso perfectamente legal mapa STL incluyendo una inserción ...

 
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

Parece que program_options hereda de std :: map para mí. Lo veo derivado de: abstract_variables_map. No he revisado si todavía se trata de un estándar de reingeniería de mapas. – Alex

+0

¡Excelente solución! – russoue

+0

@Alex, hereda de [ambos] (http://www.boost.org/doc/libs/1_55_0/boost/program_options/variables_map.hpp). – russoue

3

¿Has mirado las funciones extra_parser o allow_unregistered de Boost::Program_Options? Dependiendo de cómo funciona exactamente su programa, uno o ambos deberían ser capaces de soportar lo que desee.

Cuestiones relacionadas