boost boost-program-options

¿Cuál es la diferencia entre default_value e implicit_value en boost:: program_options?



boost-program-options (2)

Esa es la pregunta. ¿Por qué debería usar implicit_value sobre default_value y viceversa?

¡Gracias!


Si recuerdo bien, 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 en absoluto, 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 -O2 .


default_value() es el valor que se colocará en variables_map si el usuario no especificó 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 usará si el usuario especifica la opción pero sin un valor adyacente.

./a.out --width # implies width=75 if that''s the implicit_value for width ./a.out --width=80 # implicit value not used

Si usa implicit_value entonces, en las opciones cortas de las opciones de línea de comando, 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