Esa es la pregunta. ¿Por qué debería usar implicit_value sobre default_value y viceversa?¿Cuál es la diferencia entre default_value y implicit_value en boost :: program_options?
Gracias!
Esa es la pregunta. ¿Por qué debería usar implicit_value sobre default_value y viceversa?¿Cuál es la diferencia entre default_value y implicit_value en boost :: program_options?
Gracias!
Si mal no recuerdo, la diferencia surge con una opción que permite algo como -X=Y
(donde "Y" podría ser, por ejemplo, un número). El valor predeterminado es lo que obtienes si el usuario no ha ingresado un -X
en la línea de comando. Un valor implícito es lo que obtiene si el usuario ingresa -X
en la línea de comando sin especificar un valor.
Considere, por ejemplo, gcc, que admite niveles de optimización de 0 a 3 (IIRC). Si no especifica -O
, su valor predeterminado es -O0
(es decir, la optimización está desactivada). Si especifica -O
(sin número), obtiene el valor implícito, equivalente a -O1
. También puede especificar -O1
explícitamente, o puede especificar -O2
o -O3
.
default_value()
es el valor que se pondrá en el variables_map
si el usuario no ha especificado otro valor:
./a.out # implies width=75 if that's the default_value for width
./a.out --width=80 # default_value not used
implicit_value()
es el valor que se utilizará si el usuario especifica la opción pero sin un adyacentes valor.
./a.out --width # implies width=75 if that's the implicit_value for width
./a.out --width=80 # implicit value not used
Si utiliza implicit_value
luego en las opciones cortas de las opciones de línea de comandos, el usuario debe especificar el valor inmediatamente después de la opción:
./a.out -w80 # implicit_value not used
./a.out -w 80 # wrong: 80 parsed as extra arg if implicit_value is defined
No necesariamente se refleja en lo que el usuario ha especificado en la línea de comandos. Las opciones de programa de Boost usan 'options_descriptor' para todos sus analizadores sintácticos, por lo que si, por ejemplo, el valor se especifica en un archivo de configuración o en una variable de entorno, la biblioteca no recurrirá al' valor_predeterminado'. – wilhelmtell
@WilhelmTell: Muy cierto. –