Скорость связанной лямбды (через std :: function) против оператора () структуры функтора
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; }
};
В первой версии мы
std::vector<std::function<bool (int)>> lamvals;
// get parameters and for each
lamvals.emplace_back(std::bind(lam, a, std::placeholders::_1, b));
Альтернатива
std::vector<functor> lamvals;
// get parameters and for each
lamvals.emplace_back(functor{a, b});
В обоих случаях у нас есть простая итерация
return std::any_of(lamvals.cbegin(), lamvals.cend(),
[n](const decltype(lamvals)::value_type & t){return t(n);});
Я вижу разницу в скорости 3: 1, а связанная лямбда медленнее. Функтор почти так же быстр, как и сохранение целочисленных пар и жесткое кодирование тестов. Очевидно, что жесткое кодирование не так полезно для производственного кода, потому что в игре будет несколько функций, а не только между ними. Однако я могу использовать как много функторов, так и много лямбд. Последний содержит меньше строк кода и выглядит чище, но я не думаю, что могу себе позволить такую разницу в скорости; этот код находится в критическом цикле.
Я ищу предложения по ускорению.