c++ 11 lambda函数-如何传递参数
C++11 lambda function - how to pass parameter
我使用lambda函数将其传递给std::condition_variable
wait()函数,但事实并非如此。我使用不接受任何参数的lambda函数,一切对我来说都是绝对清楚的。但我完全不明白如何使用lambda函数有参数列表。显示lambda与参数使用?如何向它们传递参数?
是否使用带参数的Show lambda ?如何向它们传递参数?
它的工作原理与任何其他类型的可调用对象完全相同:
#include <iostream>
int main()
{
auto l = [] (int i) { std::cout << "The answer is " << i; };
l(42);
}
还要注意,您不需要在变量中存储lambda来调用它。下面是重写上述程序的另一种方法:
#include <iostream>
int main()
{
[] (int i) { std::cout << "The answer is " << i; } (42);
// ^^^^
// Invoked immediately!
}
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); }
使用
std::function
(这总是可能的,即使lambda正在捕获):#include <iostream> #include <functional> int main() { std::function<void(int)> f = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
auto lambda = [] (int a, int b) { return a + b; };
assert(lambda(1, 2) == 3);
你甚至不需要一个变量来保存你的lambda——你可以直接调用它:
std::cout << [](int n) { return n + 1 ; } (99) << std::endl ;
相关文章:
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 通过常量引用传递参数的矩阵模板类
- c++构造函数成员初始化:传递参数
- 通过引用传递参数时C++类型转换
- 如何从两个不同的函数传递参数
- 我在这里正确传递参数了吗?
- 在未显式传递参数时默认使用 lambda 的用户输入
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 如何在运算符的帮助下传递"=" C++参数
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 当我按值传递参数时对象被破坏时?
- 从 CMD 运行.exe并自动向其传递参数
- 传递参数时如何更新C++可选参数?
- 最佳做法是在方法中传递参数
- cuda 内核调用/传递参数中的编译错误
- 在构造函数上传递参数或在每个方法上传递参数
- 在可变参数模板中传递参数组
- 使用按名称调用传递参数
- C++ 在函数中传递参数会产生错误
- 在 lambda 中传递参数时无法调用指向成员的指针