Ho recentemente iniziato a usare boost::program_options
e l'ho trovato molto conveniente. Detto questo, manca una cosa che non sono riuscito a codificarmi in modo corretto:boost :: program_options: iterando su e stampando tutte le opzioni
Vorrei ripetere tutte le opzioni che sono state raccolte in un boost::program_options::variables_map
per stamparle sullo schermo. Questa dovrebbe diventare una funzione di convenienza, che posso semplicemente chiamare per elencare tutte le opzioni che sono state impostate senza la necessità di aggiornare la funzione quando aggiungo nuove opzioni o per ciascun programma.
So che posso controllare ed emettere singole opzioni, ma come detto sopra, questa dovrebbe diventare una soluzione generale che è ignara delle opzioni effettive. So anche che posso scorrere il contenuto di variables_map
poiché è semplicemente un esteso std::map
. Potrei quindi verificare il tipo containd nella variabile boost::any
memorizzata e utilizzare .as<>
per riconvertirlo nel tipo appropriato. Ma ciò significherebbe codificare un lungo blocco di commutazione con un caso per ciascun tipo. E questo non mi sembra un buon stile di programmazione.
Quindi la domanda è, c'è un modo migliore per scorrere su queste opzioni e produrle?
Grazie per il link e l'idea di RTTI . Speravo che potessi evitare di costruire una struttura per tutti i tipi supportati che avrei dovuto gestire se i tipi aumentassero, ma sembra che ciò non sia possibile. Fondamentalmente, volevo passare il dollaro ai tipi - come se supportassero 'operatore <<' tutto funziona bene, altrimenti la compilazione dovrebbe fallire. – shiin