C'è un modo per sapere quale chiave è stata coinvolta quando una chiamata come la seguente non riesce?Migliore gestione della chiave mancante/errata in boost :: program_options
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
Se la chiave non è presente la mappa, o non è convertibile a int, ho un bad_any_cast piuttosto uninformative, e non può conoscere uno dei seguenti:
- la chiave coinvolto
- il valore memorizzato, o anche se è lì.
- i tipi coinvolti
non riesco a trovare di qualsiasi soluzione che non comporta né modificare l'intestazione spinta o avvolgere ogni chiamata a quanto sopra in un blocco try..catch. Penso che sia un problema comune, quindi forse qualcun altro conosce un approccio migliore.
Credo che i campioni forniti nella documentazione in genere controllino tutte le opzioni usando 'if (vm.count (" some_key ")! = 0)', quindi sembra che questo sia il modo in cui intendevano utilizzarlo. –
Dovendo controllare che ogni singola chiave sia tutt'altro che ideale, speravo in una soluzione meno prolissa. Ho notato che nelle ultime versioni di boost si può impostare un'opzione come "richiesta", sollevando così un'eccezione se manca la chiave. Ovviamente questo non funzionerà per i valori opzionali, e ho ancora il problema di gestire valori non validi –