У вас не может быть auto
параметра. В основном у вас есть два варианта:
Вариант №1: Используйте, std::function
как вы показали.
Вариант №2: Используйте параметр шаблона:
template<typename F>
void f(F &lambda) { }
Вариант №2 в некоторых случаях может быть более эффективным, поскольку он позволяет избежать потенциального выделения кучи для встроенного объекта лямбда-функции, но он возможен только в том случае, если f
его можно поместить в заголовок как функцию шаблона. Это также может увеличить время компиляции и объем I-cache, как и любой шаблон. Обратите внимание, что это также может не иметь никакого эффекта, поскольку, если объект лямбда-функции достаточно мал, он может быть представлен встроенным в std::function
объект.
const&
?