nestle libreria library drink descargar bebida c++ boost

c++ - libreria - descargar boost



¿Para qué sirve boost:: program_options:: notify()? (2)

Creo que estás en el camino correcto cuando mencionas "functor" ...

Es bastante común que una opción se procese al pasar su (s) argumento (s) al método de algún objeto. Esto se puede hacer más directamente con los notificadores si puede envolver el método en algo que notifier () aceptará como argumento. Y tu puedes. (Si la función boost :: tiene una forma de hacerlo, no estoy lo suficientemente familiarizado con ella (y soy demasiado flojo para estudiarla ahora): la siguiente usa las rutinas en el encabezado funcional de STDLIB).

Ejemplo:

Una de sus opciones es --config-file, tomando un argumento de cadena, que indica la ruta de un archivo de configuración no predeterminado. Tienes una clase llamada ConfigParser. Sin notificadores, su código podría verse más o menos así:

ConfigParser *cp = new ConfigParser(); std::string cp_path; desc.add_options() ("config-file", value<std::string>(&cp_path)->default_value("~/.myconfig"), "Config File") // ... the rest of your options ; cp->setPath(cp_path);

Con los notificadores:

#include <functional> ConfigParser *cp = new ConfigParser(); desc.add_options() ("config-file", value<std::string>()->default_value("~/.myconfig")->notifier(std::bind1st(std::mem_fun(&ConfigParser::setPath), cp)), "Config File") // ... the rest of your options ;

Esta pregunta es sobre la biblioteca C ++ Boost program_options.

Todos los tutoriales son muy claros que debo llamar a notify() en mi mapa variable completo, pero no estoy seguro de qué es lo que realmente está haciendo por mí. Comentarlo no pareció tener ningún efecto, y la documentación no entró en muchos detalles:

http://www.boost.org/doc/libs/1_47_0/doc/html/boost/program_options/notify.html

Otras fuentes sugieren que ejecuta funciones "definidas por el usuario". Si es así, ¿cómo se registran esas funciones y qué hacen? ¿Podrían arrojar excepciones?


notify() es una función miembro de value_semantic . Es un gancho que se proporciona de modo que, una vez que se determina el valor final de una opción, cualquier acción que se deba tomar con esa opción se puede realizar automáticamente y se puede encapsular en su propia función. Esto evita que el código tenga una función larga que actúa en cada una de las opciones. A medida que crecen las posibles opciones, ese tipo de código de procedimiento puede ser difícil de manejar.

Puede ver un ejemplo de configuración de una función de notificación en el manual de Boost :

options_description desc; desc.add_options() ("compression", value<int>()->default_value(10), "compression level") ("email", value< vector<string> >() ->composing()->notifier(&your_function), "email") ;

Estas declaraciones especifican que el valor predeterminado de la primera opción es 10, que la segunda opción puede aparecer varias veces y que todas las instancias deben fusionarse, y que después de que el análisis finalice, la biblioteca llamará a function & your_function, pasando el valor del "email" opción como argumento.