2013-03-19 8 views
6

Sto utilizzando boost :: program_options per specificare gli argomenti della mia applicazione C++. C'è un modo per specificare che un argomento è richiesto da un insieme di alternative?Il supporto boost :: program_options richiede una di una serie di alternative?

<application> [--one int-value1 | --two string-value2 | --three] 

In precedenza, l'utente deve passare esattamente una delle alternative: --one, --two o --three.

ho potuto farlo manualmente, ma spero v'è un meccanismo incorporato invece di questo:

#include <boost/program_options.hpp> 

namespace po = boost::program_options; 

int main(int argc, char *argv[]) { 
    po::options_description options; 
    int band; 
    std::string titles_path; 

    options.add_options() 
    ("one", po::value<int>(&band)->default_value(1)) 
    ("two", po::value<std::string>(&titles_path)) 
    ("three"); 

    po::variables_map vm; 
    po::store(po::parse_command_line(argc, argv, options), vm); 

    if (1 != (vm.count("one") + vm.count("two") + vm.count("three"))) { 
    std::cerr << options << std::endl; 

    return -11; 
    } 
    return 0; 
} 

C'è un modo migliore per fare questo con le opzioni di spinta?

risposta

4

Il programma_options validator non supporta l'interdipendenza dei parametri (inclusi quelli negativi).

Probabilmente quello che fai adesso è in effetti l'opzione migliore.

+0

C'è un modo per ottenere un messaggio di aiuto/utilizzo migliore? Come in una solita app unix e come voleva WilliamKF: [--one int-value1 | --two string-value2 | --tre]. Quindi è almeno visibile nell'aiuto cosa dovrebbe essere passato. – Ela782

+1

Non che io sappia. – ypnos

Problemi correlati