2011-11-15 1 views
5

C'è un modo semplice per separare l'opzione di guida dalle opzioni del programma 'reale'? In realtà, è possibile definire una gerarchia di opzioni, alla BNF:boost program_options: help vs. opzioni significative

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

O c'è un modo migliore per raggiungere questo obiettivo? Dovrei tornare allo spirito?

risposta

7

La documentazione descrive come separare le opzioni sotto l'intestazione Option Groups and Hidden Options. Dimostra definendo più options_description oggetti e quindi utilizzando un gruppo all per l'analisi della riga di comando, ma un gruppo visible per la documentazione visualizzazione:

// 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; 
} 

Anche se la libreria Program_options consente di personalizzare alcune delle sintassi (vedi Non-conventional Syntax e Custom Validators) , non offre un modo per definire una grammatica personalizzata. Se si desidera definire la grammatica della riga di comando, utilizzare uno strumento diverso.

+0

grazie! In qualche modo ho letto su questo how-to ... – xtofl