在C++中多次调用相同的 lambda

Call the same lambda several times in C++

本文关键字:lambda 调用 C++      更新时间:2023-10-16

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;