2010-02-08 2 views
7

명령 줄 구문 분석에 boost :: program_options를 사용하는 작은 응용 프로그램을 작성했습니다. 인수가있는 경우 값을 설정하고 매개 변수가 있지만 인수가없는 경우 현재 값을 번갈아 인쇄하는 옵션이 필요합니다. 될 것 "모드를 얻을"boost :: program_options에 인수가 있거나없는 매개 변수

dc-ctl --brightness 15 

과 : 그래서 같을 것이다 "모드를 설정"

dc-ctl --brightness 
brightness=15 

문제는이 잡기없이 내가 두 번째 경우를 처리하는 방법을 모르는입니다 예외 :

error: required parameter is missing in 'brightness' 

오류가 발생하지 않도록하는 쉬운 방법이 있습니까? 인수가 구문 분석되는 즉시 발생합니다.

답변

4

How to accept empty value in boost::program_options에서 부분적인 해결책을 얻었습니다. 이는 인수가 있거나 없을 수도있는 매개 변수에 대해 implicit_value 메서드를 사용하는 것이 좋습니다. 는 그래서 "밝기"매개 변수를 초기화하는 내 전화는 다음과 같습니다

("brightness,b", po::value<string>()->implicit_value(""), 

그때 변수지도를 반복하고 문자열의 모든 인수에 대해, 나는 그것이 비어 있는지 확인하고 만약 그렇다면 나는 현재 값을 출력 . 즉, 코드는 다음과 같다 :

// check if we're just printing a feature's current value 
    bool gotFeature = false; 
    for (po::variables_map::iterator iter = vm.begin(); iter != vm.end(); ++iter) 
    { 
     /// parameter has been given with no value 
     if (iter->second.value().type() == typeid(string)) 
      if (iter->second.as<string>().empty()) 
      { 
       gotFeature = true; 
       printFeatureValue(iter->first, camera); 
      } 
    } 

    // this is all we're supposed to do, time to exit 
    if (gotFeature) 
    { 
     cleanup(dc1394, camera, cameras); 
     return 0; 
    } 

UPDATE :

./dc-ctl -b500 

대신

: 암시 값 지금 인자를 사용할 때의 상기 구문 변경, 소정의 경우, 형태이어야
./dc-ctl -b 500 

다른 사람에게 도움이되기를 바랍니다.

관련 문제