Лямбда как параметр функции - PullRequest
59 голосов
/ 13 ноября 2011

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

Ответы [ 2 ]

56 голосов
/ 13 ноября 2011

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

// 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; };
25 голосов
/ 13 ноября 2011

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

#include <functional>

std::function<double (double, double)> f = [](double a, double b) { return a*b };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...