Короткая версия :
less<bool>
сравнение bool
с. Используйте less<double>
для сравнения double
с (также в greater<>
).
Длинная версия :
Это интересный вопрос. В частности, как получается следующая строка?
function<bool(double, double)> opFunct = less<bool>();
В конце концов std::less<bool>
:: operator()
выглядит как bool(bool, bool)
, почему она соответствует bool(double, double)
?
Это потому, что проверка, которую выполняет конструктор std::function
, заключается просто в том, можно ли less<bool>()
вызвать как bool(double, double)
, и да, может! double
неявно преобразуется в bool
, 0.0
становится false
и любым другим значением true
.
Это, очевидно, не приведет к ожидаемому результату, потому что, например, opFunct(1.0, 2.0)
вызовет less(true, true)
который вернет false
.
Исправление должно измениться bool
на double
function<bool(double, double)> opFunct = less<double>();
А также здесь
opFunct = greater<double>();
Но подождите , std::function
в сторону 1 , в зависимости от того, как выглядит остальная часть вашего кода, показанный фрагмент может быть потенциально упрощен до:
if (pCheck ? pStay.middle < pOut.low : pOut.high < pStay.middle) {
// . . .
}
Или, может быть, даже
if (pStay.middle < pOut.low || pOut.high < pStay.middle) {
// both checks at once . . .
}
1 std::function
стоит около 48-96 байт памяти и дополнительные косвенные или два. Сравните сгенерированный код для версии с std :: function против версии без std :: function .