2011-11-15 26 views
5

¿Hay alguna manera fácil de separar la opción de ayuda de las opciones del programa "real"? De hecho, es posible definir una jerarquía de opciones, a la BNF:boost program_options: ayuda contra opciones significativas

options := help_options | program_options 
help_options := '-h' 
program_options := '-m1' mode1options | '-m2' mode2options 
mode1options := number 
... 

O hay una mejor manera de lograr esto? ¿Debo volver al espíritu?

Respuesta

7

La documentación describe cómo separar las opciones bajo el encabezado Option Groups and Hidden Options. Demuestra que define múltiples options_description objetos y luego usando un grupo all para analizar la línea de comandos, pero un grupo visible para la visualización de la documentación:

// Declare an options description instance which will include 
// all the options 
options_description all("Allowed options"); 
all.add(general).add(gui).add(backend); 

// Declare an options description instance which will be shown 
// to the user 
options_description visible("Allowed options"); 
visible.add(general).add(gui); 

variables_map vm; 
store(parse_command_line(ac, av, all), vm); 

if (vm.count("help")) 
{ 
    cout << visible; 
    return 0; 
} 

Aunque la biblioteca Program_options le permite personalizar algunos de la sintaxis (ver Non-conventional Syntax y Custom Validators) , no ofrece una forma de definir una gramática personalizada. Si desea definir la gramática de la línea de comando, use una herramienta diferente.

+0

gracias! De alguna manera, leí sobre este cómo hacerlo ... – xtofl

Cuestiones relacionadas