我想写一个返回自己的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)
有没有办法做一些类似的事情?
用旧仿函数:
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)
你不能返回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)
但是,这只允许再次调用它.不确定是否有一些技巧可以从中获得更多...