Nie możesz mieć auto
parametru. Zasadniczo masz dwie opcje:
Opcja nr 1: Użyj, std::function
jak pokazano.
Opcja nr 2: użyj parametru szablonu:
template<typename F>
void f(F &lambda) { }
Opcja nr 2 może w niektórych przypadkach być bardziej wydajna, ponieważ pozwala uniknąć potencjalnej alokacji sterty dla osadzonego obiektu funkcji lambda, ale jest możliwa tylko wtedy, gdy f
można ją umieścić w nagłówku jako funkcję szablonu. Może również wydłużyć czas kompilacji i zwiększyć rozmiar pamięci podręcznej I-cache, podobnie jak każdy szablon. Zauważ, że może to również nie mieć żadnego efektu, ponieważ jeśli obiekt funkcji lambda jest wystarczająco mały, może być reprezentowany w std::function
obiekcie.
const&
?