¿Cómo inserta manualmente las opciones en boost.Program_options?
-
20-08-2019 - |
Pregunta
Tengo una aplicación que usa Boost.Program_options para almacenar y administrar sus opciones de configuración. Actualmente nos estamos alejando de los archivos de configuración y en su lugar estamos usando la configuración cargada de la base de datos. He escrito 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 las opciones_programación de impulso. ¿Alguien ha usado esto antes, alguna idea? Los documentos de boost parecen indicar que la única forma de obtener cosas en ese mapa es mediante la función store, que se lee desde la línea de comandos 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.
Solución
Mi respuesta llega un poco tarde, pero pasé un tiempo tratando de hacer algo similar y encontré una solución molestamente obvia (en caso de que alguien más esté buscando esto) ...
Recordando que boost::program_options::variables_map
se deriva de std::map<std::string, boost::program_options::variable_value>
, puede hacer un procesamiento de mapa STL perfectamente legal que incluye 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-
Otros consejos
¿Has mirado las funciones extra_parser
o allow_unregistered
de Boost::Program_Options
? Dependiendo exactamente de cómo funciona su programa, uno o ambos deberían ser capaces de soportar lo que desea.