2014-08-28 6 views

답변

7

아니요, 불가능합니다. 모든 옵션은 here으로 설명됩니다. 수동으로 점검하거나 함수를 작성하여 수동으로 점검 할 수 있습니다. 확인 기능은 C++ (11)이도 람다 식을 사용하여 달성 될 수있어서

void check(unsigned short value) 
{ 
    if (value < 0 || value > 10) 
    { 
     // throw exception 
    } 
} 

이상의 일반

template<typename T> 
void check_range(const T& value, const T& min, const T& max) 
{ 
    if (value < min || value > max) 
    { 
     // throw exception 
    } 
} 

opt::value<unsigned short>()->default_value(5)->notifier 
(boost::bind(&check_range<unsigned short>, _1, 0, 10)); 
+0

이것은 좋은 대답입니다. 감사합니다. –

7

같은 인

opt::value<unsigned short>()->default_value(5)->notifier(&check_function); 

.

opt::value<unsigned short>() 
    ->default_value(5) 
    ->notifier(
     [](std::size_t value) 
     { 
     if (value < 0 || value > 10) { 
      // throw exception 
     } 
     }) 

이 편하게

throw opt::validation_error(
    opt::validation_error::invalid_option_value, 
    "option_name", 
    std::to_string(value)); 
7

같은 내가 람다 (같은이 kaveish'sanswer)를 추천, 콜 점에 가까운 유효성 검사 코드 자체를 유지하고 예외를 쉽게 사용자 정의 할 수 있습니다. 그러나 모든 것을 더 읽기 쉽게 만들기 위해 적절한 범위를 검사하는 함수를 반환하게 할 수 있습니다.

auto in = [](int min, int max, char const * const opt_name){ 
    return [opt_name, min, max](unsigned short v){ 
    if(v < min || v > max){ 
     throw opt::validation_error 
     (opt::validation_error::invalid_option_value, 
     opt_name, std::to_string(v)); 
    } 
    }; 
}; 

opt::value<unsigned short>()->default_value(5) 
    ->notifier(in(0, 10, "my_opt")); 
+0

나는이 솔루션을 많이 좋아한다. 일단 마이너 트윅 - 템플릿 변수로'min','max' 및'v' 타입의 템플릿 함수를'in'으로 만들었습니다. – alan