lambda可以重用吗? 我想几次叫这个lambda。但是我找不到命名的方法。
[]() { cout << "lambda is called"; };
不调用这样的lambda的目的是什么?编译器不会对上面的代码大喊大叫,但是它没有用。我说的对吗?
答案 0 :(得分:7)
您可以使用auto
修饰符为其命名:
auto f = []() { cout << "lambda is called"; };
这将允许您使用f()
来调用它。但是请记住,未指定lambda的类型,因此,如果要将其传递给函数,则需要使用模板(或转换为std::function<void()>
)。
template <typename F>
void three_times(F g) {
g(); g(); g();
}
答案 1 :(得分:6)
如果要重用lambda,则需要将其分配给变量。
auto lambda = []() { cout << "lambda is called"; };
为您提供了一个名为lambda
的对象,您可以调用它operator ()
来执行lambda的主体
lambda();
答案 2 :(得分:5)
是的,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;
}
Output: main func func2 main func func2
答案 3 :(得分:4)
您可以通过将lambda分配给auto
变量来轻松命名-就像这样;
const auto l = [] { whatever };
然后以l
的身份多次呼叫l();
。
答案 4 :(得分:3)
使用自动存储lambda 或将其明确分配给兼容的std :: function:
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;