2013-03-19 14 views
6

Używam boost :: program_options do określenia argumentów do mojej aplikacji C++. Czy istnieje sposób na określenie, że jeden argument jest wymagany z zestawu alternatyw?Czy boost :: program_options obsługuje wymaganie jednej z serii alternatyw?

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

powyżej, użytkownik musi przejść dokładnie jedną z alternatyw: --one, --two lub --three.

mogę to zrobić ręcznie, ale nadzieję, że jest wbudowany mechanizm zamiast tego:

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

Czy istnieje lepszy sposób to zrobić z opcji Boost?

Odpowiedz

4

Narzędzie do sprawdzania poprawności programów nie obsługuje współzależności między parametrami (w tym wartości ujemne).

Prawdopodobnie to, co teraz robisz, jest najlepszą opcją.

+0

Czy istnieje sposób na uzyskanie lepszego komunikatu o pomocy/użytkowaniu? Jak w zwykłej aplikacji unix i jak chciał WilliamKF: [--one int-value1 | - dwa łańcuchy-wartość2 | --trzy]. Jest więc przynajmniej widoczne w pomocy, co powinno zostać przekazane. – Ela782

+1

Nie o tym wiem. – ypnos