Ви не можете мати auto
параметр. В основному у вас є два варіанти:
Варіант №1: Використовуйте, std::function
як ви показали.
Варіант №2: Використовуйте параметр шаблону:
template<typename F>
void f(F &lambda) { }
Варіант №2 може, в деяких випадках, бути більш ефективним, оскільки він може уникнути розподілу потенційного купи для вбудованого об’єкта лямбда-функції, але можливий лише в тому випадку, якщо f
його можна розмістити в заголовку як шаблонну функцію. Це також може збільшити час компіляції та розмір I-cache, як і будь-який шаблон. Зверніть увагу, що це може також не мати ефекту, так як якщо об'єкт лямбда-функції досить малий, він може бути представлений в std::function
об'єкті в рядку .
const&
?