2016-07-10 6 views
8

boost::program_options을 사용하여 다른 옵션에 의존하는 프로그램 옵션을 만드는 방법이 있습니까?부스트 프로그램 옵션 종속 옵션

예를 들어, 내 프로그램은 다음 샘플 인수를 사용할 수 있습니다 : 그들은 scan을 동반하는 경우이 예에서

wifi --scan --interface=en0 
wifi --scan --interface=en0 --ssid=network 
wifi --do_something_else 

을의 interfacessid 인수에만 유효합니다. 그들은 scan 인수에 의존합니다.

boost::program_options과 함께 자동으로 적용 할 수있는 방법이 있습니까? 물론 수동으로 구현할 수도 있지만 더 좋은 방법이 있어야 할 것 같습니다.

+0

나는 boost :: po에 그렇게 할 수있는 방법이 없다고 생각합니다 : [value_semantic] (http://www.boost.org/doc/libs/1_58_0/doc/html)에 대한 공개 API를 살펴보십시오. /boost/program_options/value_semantic.html) ('po :: value ()'비트)와 [option_description] (http://www.boost.org/doc/libs/1_58_0/doc/html/boost/program_options /option_description.html) – Rerito

답변

2

real.cpp에서 설명한 것처럼 작은 함수를 정의하는 두 가지 종속 옵션을 정의 할 수 있습니다.

void option_dependency(const boost::program_options::variables_map & vm, 
    const std::string & for_what, const std::string & required_option) 
{ 
    if (vm.count(for_what) && !vm[for_what].defaulted()) 
    if (vm.count(required_option) == 0 || vm[required_option].defaulted()) 
     throw std::logic_error(std::string("Option '") + for_what 
      + "' requires option '" + required_option + "'."); 
} 

다음이 기능 option_dependency 한 것을 바로 boost::program_options::store()

에주의 후

option_dependency (vm, "interface", "scan"); 
option_dependency (vm, "ssid", "scan"); 

를 호출 : 예를 들어, 두 사람은 따라 (또는 충돌) 옵션이 option_dependency() 함수를 정의 지정할 수 있습니다 - 단지 길. 이 경우 ssidscan 옵션이 필요하지만 다른 방법은 필요하지 않습니다.