Я использую API, который принимает функцию с единственным аргументом в качестве обратного вызова. Обратный вызов принимает один аргумент определенного типа, и для простоты я скажу, что он возвращает bool
. Главной вещью, которую я пытался собрать, была функция проверки диапазона. Моей интуицией было бы написать что-то вроде этого:
template<class T, T min, T max>
constexpr bool in_range(T val) {
return (val >= min && val <= max);
}
static_assert(in_range<float, 0.0f, 1.0f>(0.5f), "doesn't work")
Однако это не работает, поэтому я по умолчанию создал эту функцию.
template<class T>
std::function<bool(T)> in_range(T min, T max) {
auto test = [min, max](T val) {
return (val >= min && val <= max);
};
return test;
}
assert(in_range<float>(0.0f, 1.0f)(0.5f))
Есть ли способ написать функцию больше в форме первой функции, поэтому я не зависим от std::function
и лямбда-выражений, генерируемых во время выполнения?