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

zhe*_*aus 2 c++ lambda

lambda可以重复使用吗?我想把这个lambda称为几次.但我找不到给它命名的方法.

[]() { cout << "lambda is called"; };
Run Code Online (Sandbox Code Playgroud)

没有像这样调用lambda的目的是什么?编译器不会对上面的代码大喊大叫,但它没用.我对吗?

jua*_*nza 7

您可以使用说明auto符为其命名:

auto f = []() { cout << "lambda is called"; };
Run Code Online (Sandbox Code Playgroud)

这将允许您使用它来调用它f().但请记住,未指定lambda的类型,因此如果要将其传递给函数,则需要使用模板(或转换为std::function<void()>).

template <typename F>
void three_times(F g) {
    g(); g(); g();
}
Run Code Online (Sandbox Code Playgroud)


Nat*_*ica 6

如果要重用lambda,则需要将其分配给变量.

auto lambda = []() { cout << "lambda is called"; };
Run Code Online (Sandbox Code Playgroud)

给你一个名为的对象lambda,你可以调用它operator ()来执行lambda的主体

lambda();
Run Code Online (Sandbox Code Playgroud)


shi*_*ish 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;
}
Run Code Online (Sandbox Code Playgroud)


Output:
main
func
func2
main
func
func2