Ответ 1
Показывать lambda с параметрами? Как передать им параметры?
Он работает точно так же, как с любым другим типом вызываемого объекта:
#include <iostream>
int main()
{
auto l = [] (int i) { std::cout << "The answer is " << i; };
l(42);
}
Также обратите внимание, что вам не нужно хранить лямбда в переменной, чтобы вызвать ее. Ниже приведен альтернативный способ перезаписи вышеуказанной программы:
#include <iostream>
int main()
{
[] (int i) { std::cout << "The answer is " << i; } (42);
// ^^^^
// Invoked immediately!
}
Тип лямбда-функции (так называемое "лямбда-замыкание" ) определяется компилятором и является функтором с оператором вызова, подпись которого указана при определении лямбда. Поэтому вы называете лямбда точно так же, как вы бы назвали функтор (т.е. Точно так же, как вы бы вызвали функцию - или любой вызываемый объект).
Таким образом, если вы хотите назначить лямбда объекту, наилучшей практикой является позволить компилятору вывести его тип с помощью auto
. Если вы не хотите или не можете использовать auto
, вы можете:
-
Используйте указатели на функции для не-захвата lambdas (захват lambdas не конвертируется в указатели на функции). В приведенном выше случае, таким образом, будет также работать следующее:
#include <iostream> int main() { void (*f)(int) = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
-
Используйте
std::function
(это всегда возможно, даже если лямбда захватывается):#include <iostream> #include <functional> int main() { std::function<void(int)> f = [] (int i) { std::cout << "The answer is " << i; }; f(42); }