Zastanawiam się, czy można napisać funkcję, która zwraca funkcję lambda w C++ 11. Oczywiście jednym z problemów jest deklaracja takiej funkcji. Każda lambda ma typ, ale tego typu nie można wyrazić w C++. Nie sądzę, że to będzie działać:Funkcja zwracająca wyrażenie lambda
auto retFun() -> decltype ([](int x) -> int)
{
return [](int x) { return x; }
}
Nor to:
int(int) retFun();
nie jestem świadomy żadnej automatycznej konwersji z lambda do, powiedzmy, wskaźniki do funkcji, czy coś takiego. Czy jedynym rozwiązaniem jest ręczne opracowanie obiektu funkcji i zwrócenie go?
Aby dodać to, co zostało już powiedziane, bezpaństwowe funkcje lambda można zamienić na wskaźniki funkcji. –
IMO twoja pierwsza opcja nie będzie działać, ponieważ lambda w 'decltype' nie jest taka sama jak w ciele funkcji i dlatego ma inny typ (nawet jeśli zawarłeś zwrotną instrukcję) – Motti
Przy okazji, jeśli lambda ma pustą klauzulę przechwytywania, może być niejawnie przekształcalna na wskaźnik do funkcji. – GManNickG