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?
Respuesta
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-
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
¡Excelente solución! – russoue
@Alex, hereda de [ambos] (http://www.boost.org/doc/libs/1_55_0/boost/program_options/variables_map.hpp). – russoue
¿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.
- 1. ¿Cómo puedo insertar mi identidad manualmente?
- 2. Usando Boost.Program_options en el programa modular
- 3. ¿Cómo puedo insertar dinámicamente nuevas opciones en dijit.form.Select
- 4. ¿Cómo puedo invocar el diálogo para configurar las opciones de la impresora manualmente?
- 5. ¿Debo insertar manualmente la información de tamaño de datos en una transferencia TCP?
- 6. Insertar manualmente en una tabla por instrucción SQL, pero la clave está autoincrementada
- 7. ¿Por qué no funciona mi script, pero puedo INSERTAR manualmente en mysql?
- 8. ¿Cómo copio manualmente ensamblajes en el GAC?
- 9. cómo asignar manualmente imagefield en Django
- 10. ¿Cómo llamar un evento manualmente en C#?
- 11. Cómo detener manualmente en BroadcastReceiver androide
- 12. ¿Cómo configuro manualmente un DataSource en Java?
- 13. ¿Cómo invoco manualmente una Acción en Swing?
- 14. ¿Cómo construir manualmente un AST?
- 15. ggplot2: cómo ajustar manualmente scale_area
- 16. ¿Cómo crear un TypeTag manualmente?
- 17. ¿Cómo invocar manualmente un evento?
- 18. ¿Cómo reiniciar Visual Studio manualmente?
- 19. QTextEdit. ¿Cómo seleccionar texto manualmente?
- 20. Cómo iniciar IIS Express manualmente
- 21. Cómo cerrar una jgrowl manualmente
- 22. Cómo generar manualmente números aleatorios
- 23. Cómo desplazar un panel manualmente?
- 24. ¿Cómo tener una opción que habilite otras opciones en Opciones de programas Boost sin usar variables?
- 25. MVC DropDownListFor - ¿Debo volver a llenar manualmente las opciones después de que la validación falla?
- 26. Instalando Java manualmente en Windows?
- 27. Dibujar dendograma en python manualmente
- 28. ¿Cómo obtengo opciones interdependientes?
- 29. cómo insertar UIImage en UITextView
- 30. Cómo insertar en std :: map?
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