auto lam = [](int a, int b, int c) { return a < b && b < c; };
struct functor {
int a;
int b;
bool operator()(int n) const { return a < n && n < b; }
};
< /code>
В первой версии мы < /p>
std::vector lamvals;
// get parameters and for each
lamvals.emplace_back(std::bind(lam, a, std::placeholders::_1, b));
< /code>
Альтернатива - < /p>
std::vector lamvals;
// get parameters and for each
lamvals.emplace_back(functor{a, b});
< /code>
В обоих случаях у нас есть простая итерация < /p>
return std::any_of(lamvals.cbegin(), lamvals.cend(),
[n](const decltype(lamvals)::value_type & t){return t(n);});
< /code>
Я вижу разницу в скорости 3: 1, с границей Lambda медленнее. Функтор почти такой же быстрый, как хранение целочисленных пар и жестких кодировки тестов. Очевидно, что жесткий кодирование не так полезно для производственного кода, потому что в игре будет несколько функций, а не только между. Тем не менее, я могу пойти со многими функторами или многими ламбдами. Последнее меньше строк кода и выглядит чище, но я не думаю, что могу позволить себе такую разницу в скорости; Этот код находится в критическом цикле. < /p>
Я ищу предложения ускорения. < /p>
Подробнее здесь: https://stackoverflow.com/questions/259 ... tor-struct