c++ - ¿Cómo se insertan opciones manualmente en boost.Program_options?
configuration boost-program-options (2)
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.
¿Has visto 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.
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
deriva de std::map<std::string, boost::program_options::variable_value>
, puede hacer un procesamiento de mapas STL perfectamente legal incluyendo 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-