Подтвердить что ты не робот

Lambda как параметр функции

Какая запись для объявления лямбда-переменной или параметра функции без использования auto или шаблонов? Есть ли способ сделать это? Или компилятор определяет уникальный объект класса для каждой лямбда, имя которой неизвестно программисту перед компиляцией? Если да, то почему? Разве они не могут быть переданы как своего рода указатель на функцию? Было бы большим разочарованием, если бы это было невозможно.

4b9b3361

Ответ 1

Lambdas может содержать состояние (например, захваченные ссылки из окружающего контекста); если они этого не делают, они могут быть сохранены в указателе функции. Если это так, они должны быть сохранены как объект функции (потому что нет места для сохранения состояния в указателе функции).

// No state, can be a function pointer:
int (*func_pointer) (int) = [](int a) { return a; };

// One with state:
int b = 3;
std::function<int (int)> func_obj = [&](int a) { return a*b; };

Ответ 2

Вы можете использовать полиморфную оболочку для объекта функции. Например:

#include <functional>

std::function<double (double, double)> f = [](double a, double b) { return a*b };