2013-07-25 18 views
6

L'opzione parser spinta permette di assegnare una variabile per memorizzare il valore di opzione, invece di utilizzare il modo so_long["typing"].as<bool>():come memorizzare automaticamente il valore di un semplice flag in una variabile?

bool flag_value; 
entries.add_options() 
("flag", value<bool>(&flag_value), "a simple flag value"); 
...... 
cout<<"flag value is: "<<flag_value<<endl; 

Tuttavia, la dichiarazione opzione precedente non crea una semplice opzione bandiera. In realtà richiede di inserire qualcosa come valore (--flag true | false | on | off | yes | no | 1 | 0), che non è quello che voglio.

Quindi, esiste un modo per memorizzare il risultato all'interno di un valore booleano e mantenere l'opzione come una semplice bandiera?

risposta

10

avere un'opzione senza valore (passaggio significa che è impostato true) si dovrebbe crearlo come this:

options_description desc; 
desc.add_options() 
    ("help", "produce help message") 

Per utilizzare notificante per una tale opzione è possibile utilizzare il following type come la semantica:

boost::program_options::bool_switch() 

può avere true o false valori e nessun valore può essere esplicitamente preso per questa opzione dalla riga di comando. Se l'opzione viene passata, il valore è true. Se non superato, il valore è false.

+3

nessun commento su downvote? – Riga

+1

Forse il downvoter ti ha pensato [duplicato un'altra tua risposta] (http://stackoverflow.com/a/7277180/591064)? Ecco un +1 per uniformarlo, la tua risposta mi ha aiutato. – ixe013