C++ lambda返回自己

SU3*_*SU3 8 c++ lambda

我想写一个返回自己的lambda,所以我可以在现场多次调用它.但看起来lambda内部this不是指lambda而是指周围对象this,如果lambda是在成员函数内定义的话.

这是一个例子:

#include <iostream>

int main(int argc, char* argv[]) {
  int a = 5;
  [&](int b) {
    std::cout << (a + b) << std::endl;
    return *this;
  }(4)(6);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做一些类似的事情?

Jar*_*d42 8

用旧仿函数:

int main() {
  int a = 5;
  struct S {
    const S& operator ()(int b) const {
      std::cout << (a + b) << std::endl;
      return *this;
    }
    const int& a;
  };
  S{a}(4)(6);
}
Run Code Online (Sandbox Code Playgroud)

演示


for*_*818 6

你不能返回lambda本身,但你可以返回另一个:

#include <iostream>

int main() {
  int a = 5;    
  [&](int b) {
      auto impl = [&](int b){std::cout << (a + b) << std::endl;};
      impl(b);
      return impl;
  }(4)(6);
}
Run Code Online (Sandbox Code Playgroud)

但是,这只允许再次调用它.不确定是否有一些技巧可以从中获得更多...

  • @HolyBlackCat看起来比实际更好.一次只能拨打一次或两次:/ (2认同)