2013-03-19 3 views
6

boost :: program_options를 사용하여 C++ 응용 프로그램에 인수를 지정하고 있습니다. 대안 집합에서 하나의 인수가 필요하다는 것을 지정하는 방법이 있습니까? --one, --two, 또는 --three :boost :: program_options는 일련의 대안 중 하나를 요구합니까?

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

, 사용자는 정확히 대안 중 하나를 통과해야합니다.

나는 수동으로 수행하지만, 대신의 기본 메커니즘이 희망 수 :

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

부스트 옵션을 사용하여이 작업을 수행 할 수있는 더 나은 방법이 있나요이?

답변

4

program_options 유효성 검사기는 매개 변수 상호 종속성 (음수 포함)을 지원하지 않습니다.

아마 지금 당신이하는 일이 실제로 최선의 선택입니다.

+0

더 나은 도움말/사용법 메시지를 얻을 수있는 방법이 있습니까? 평범한 유닉스 앱처럼 WilliamKF가 원했던 것처럼 : [--one int-value1 | --two 문자열 값 2 | --세]. 따라서 도움이 필요한 부분은 최소한 통과되어야합니다. – Ela782

+1

내가 아는 바가 없다. – ypnos