기본값을 설정할 수 있으므로 값의 최소 한도와 최대 한도를 설정할 수 있습니까 (부호가없는 짧은 것으로 가정하고 0과 10 사이의 값이 필요합니다)옵션에 대한 최소값과 최대 값을 설정하는 옵션을 강조 표시합니다.
opt::value<unsigned short>()->default_value(5)
각 옵션을 확인하지 않고 프로그램 옵션의 변수 맵에서 주어진 인수를 즉시 사용하고 싶습니다.
기본값을 설정할 수 있으므로 값의 최소 한도와 최대 한도를 설정할 수 있습니까 (부호가없는 짧은 것으로 가정하고 0과 10 사이의 값이 필요합니다)옵션에 대한 최소값과 최대 값을 설정하는 옵션을 강조 표시합니다.
opt::value<unsigned short>()->default_value(5)
각 옵션을 확인하지 않고 프로그램 옵션의 변수 맵에서 주어진 인수를 즉시 사용하고 싶습니다.
아니요, 불가능합니다. 모든 옵션은 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));
같은 인
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));
같은 내가 람다 (같은이 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"));
나는이 솔루션을 많이 좋아한다. 일단 마이너 트윅 - 템플릿 변수로'min','max' 및'v' 타입의 템플릿 함수를'in'으로 만들었습니다. – alan
이것은 좋은 대답입니다. 감사합니다. –