Lit*_*ter 21 c++ lambda functional-programming c++11
我使用lambda函数将它传递给std::condition_variablewait()函数,但事实并非如此.我使用没有接收任何参数的lambda函数,对我来说一切都是绝对清楚的.但我完全不明白如何使用具有参数列表的lamdba函数.显示带参数的lambda?如何将参数传递给他们?
And*_*owl 32
显示带参数的lambda?如何将参数传递给他们?
它的工作方式与任何其他类型的可调用对象完全相同:
#include <iostream>
int main()
{
auto l = [] (int i) { std::cout << "The answer is " << i; };
l(42);
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您不需要在变量中存储lambda以便调用它.以下是重写上述程序的另一种方法:
#include <iostream>
int main()
{
[] (int i) { std::cout << "The answer is " << i; } (42);
// ^^^^
// Invoked immediately!
}
Run Code Online (Sandbox Code Playgroud)
lambda函数的类型(所谓的"lambda闭包")由编译器定义,并且是一个带有调用操作符的仿函数,其签名是您在定义lambda时指定的签名.因此,您可以像调用函数一样调用lambda(就像调用函数一样 - 或任何可调用对象).
因此,如果要将lambda分配给对象,最佳做法是让编译器通过使用来推断其类型auto.如果您不想或不能使用auto,那么您可以:
使用函数指针来捕获lambda(捕获lambda 不能转换为函数指针).因此,在上述情况下,以下内容也适用:
#include <iostream>
int main()
{
void (*f)(int) = [] (int i) { std::cout << "The answer is " << i; };
f(42);
}
Run Code Online (Sandbox Code Playgroud)使用std::function(这总是可行的,即使lambda正在捕获):
#include <iostream>
#include <functional>
int main()
{
std::function<void(int)> f = [] (int i)
{ std::cout << "The answer is " << i; };
f(42);
}
Run Code Online (Sandbox Code Playgroud)小智 5
auto lambda = [] (int a, int b) { return a + b; };
assert(lambda(1, 2) == 3);
Run Code Online (Sandbox Code Playgroud)