Wpis z mikrobloga

#cpp #programowanie

Chcę wygenerować wskaźnik do funkcji zwracającej double'a (przyjmuje też double) za pomocą lambdy.

To zadziała:

double (*lambda1)(double) = [](double a)->double {
return a;
};
ale to już nie:

double b = 1;
double (*lambda2)(double) = [=](double a)->double {
return b*a;
};
Dlaczego, gdy używam zewnętrzną zmienną w lambdzie to już nie jest to wskaźnik na taką samą funkcję?
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@kuhar: (#) Przekazanie przez wartość czy przez referencję nie robi różnicy. Wyskakuje

cannot convert ‘main()::__lambda1’ to ‘double (*)(double)’ in initialization
.
  • Odpowiedz
@Helmans: (#) Ale pierwsza wersja działa. To ta zewnętrzna zmienna coś psuje.

Ogólnie chodzi mi o to, żeby zwrócić tę lambdę z funkcji. Jak ustawiam auto to i tak potem przy returnie wyskakuje błąd, że nie może skonwertować na taki wskaźnik.
  • Odpowiedz
@Chmurzak: ustaw typ zwracany z funkcji na std::function i wtedy zwróć lambdę przez wartość.

swoją drogą to nie powinieneś robić czegoś takiego jak zwracanie lambdy z funkcji... to nie ma sensu, poczytaj o funktorach.
  • Odpowiedz