В C ++ 14 нет прямого эквивалента такой функции, но для небольших типов с быстрым сравнением на равенство вы можете использовать std::clamp
:
if (val == std::clamp(val, low, high)) {
...
}
В качестве альтернативы, вы можете просто написать свою собственную функцию для проверки:
template <typename T>
bool IsInBounds(const T& value, const T& low, const T& high) {
return !(value < low) && (value < high);
}
Проверяет, находится ли value
в диапазоне [низкий, высокий). Если вы хотите диапазон [низкий, высокий], вы должны написать это как
template <typename T>
bool IsInBounds(const T& value, const T& low, const T& high) {
return !(value < low) && !(high < value);
}
Обратите внимание, что это определяется исключительно в терминах operator <
, что означает, что здесь может использоваться любой класс, который поддерживает только operator <
.
Аналогично, вот один с использованием пользовательских компараторов:
template <typename T, typename R, typename Comparator>
bool IsInBounds(const T& value, const R& low, const R& high, Comparator comp) {
return !comp(value, low) && comp(value, high);
}
У этого последнего есть приятное преимущество в том, что low
и high
не обязательно должны быть того же типа, что и value
, и до тех пор, пока компаратор может справиться, он будет работать просто отлично.
Надеюсь, это поможет!