C++ Standard części § 5.1.2/6 [expr.prim.lambda]
typ zamknięcia dla nierodzajowego lambda ekspresji bez przechwytywania lambda ma publiczną nie-wirtualną, nie jawną funkcję konwersji stałej do wskaźnika na funkcję z łączem języka C++ (7.5) mającym ten sam parametr i typy zwracane, co operator wywołania funkcji typu zamknięcia. Wartość zwracana przez tę funkcję konwersji powinien być adres funkcji, która, gdy wywoływany, ma taki sam efekt jak wywoływanie typ zamknięcia operator wywołania funkcji
Od twojej lambda ma przechwytywania (a domyślna: [&]
) , nie ma operatora konwersji do wskaźnika do funkcji.
Alternatywnie, można użyć std::function<>
owinąć lambda:
#include <functional>
#include <iostream>
int main()
{
int i = 42;
std::function<void(void)> f = [&](){ std::cout << i; };
f();
}
auto f = [&]() {...}? – Kiroxas
Lambdas z przechwytującymi nie można przekonwertować na wskaźniki funkcji. – user657267
Uwaga: nie próbujesz przekazać funkcji lambda przez odniesienie. – juanchopanza