在C++中多次调用相同的 lambda
Call the same lambda several times in C++
lambda可以重用吗? 我想称这个lambda几次。但是我找不到给它起名字的方法。
[]() { cout << "lambda is called"; };
不这样调用 lambda 的目的是什么?编译器不会对上面的代码大喊大叫,但它是无用的。我说的对吗?
您可以使用auto
说明符为其命名:
auto f = []() { cout << "lambda is called"; };
这将允许您使用f()
.但请记住,lambda 的类型没有指定,因此如果要将其传递给函数,则需要使用模板(或转换为std::function<void()>
(。
template <typename F>
void three_times(F g) {
g(); g(); g();
}
如果要重用 lambda,则需要将其分配给变量。
auto lambda = []() { cout << "lambda is called"; };
为您提供一个名为lambda
的对象,您可以调用operator ()
该对象来执行 lambda 的主体,例如
lambda();
是的,lamda 可以重复使用。请参阅下面的示例
#include <iostream>
using namespace std;
template <typename F> void func2(F f) {
f("func2");
}
void func(function<void(const char *)> f) {
f("func");
}
int main() {
auto l = [](const char *s) {
cout << s << "n";
};
for (int i = 0; i < 2; i++) {
l("main"); // Calling lambda multiple times
func(l); // Passing lambda to a function using function<>
func2(l); // Passing lambda to a function using template
}
return 0;
}
输出: 主要 函数 函数2 主要 函数 函数2
您可以通过将 lambda 分配给auto
变量来轻松为其命名 - 就像这样;
const auto l = [] { whatever };
然后多次调用l
作为l();
。
使用 auto 存储 lambda 或将其显式分配给兼容的 std::函数:
auto f1 = [](int x, int y)->float{ ..... };
std::function<float(int,int)> f2 = [](int x, int y)->float{ ..... };
float x = f1(3,4);
auto y = f2(5,6);
std::function<float(int,int)> f3 = f1;
相关文章:
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 在C++中多次调用相同的 lambda
- C++:对象将 lambda 存储到结构中,稍后调用该函数
- 模拟成员函数调用 lambda
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 使用多个输入向量中值的笛卡尔乘积调用 lambda
- lambda 函数使用其参数作为模板参数调用模板函数
- QT C++如何调用lambda one
- 尽管显式声明了返回类型,但对lambda的调用是不明确的
- 使用默认参数从 lambda 调用最少数量的参数
- 通过 lambda 调用成员函数时意外未初始化的数据
- 默认函数对象值作为要使用lambda调用的函数参数
- 这种递归多态 C++1y lambda 调用有什么问题?
- 返回一个 std::函数包装的 lambda,该 lambda 调用指向成员函数的指定指针
- 使用lambda调用的Move构造函数
- Boost hana fold_left lambda调用的引用
- lambda调用另一个外部lambda
- 如何指定vc11 lambda调用约定