是否有可能在类X内部并在类X外定义的lambda神奇地使用该类X的成员变量?
像这样:
struct Foo {
int x;
std::function<void(void)> f;
};
int main() {
Foo foo;
foo.x = 10;
foo.f = []() {
std::cout << x;
};
foo.f();
}
如果没有任何上下文,它会神奇地使用Foo结构中的“x”。
我认为因为lambda是一个匿名结构,如果我在该函数中传递对象“foo”(C方式),它显然有效:
struct Foo {
int x;
std::function<void(Foo&)> f;
};
int main() {
Foo foo;
foo.x = 10;
foo.f = [](Foo& me) {
std::cout << me.x;
};
foo.f(foo);
}
这有什么解决方法吗?
答案 0 :(得分:3)
自然的方法是使用构造函数:
struct Foo {
int x;
std::function<void()> f = [this]() { std::cout << x; };
};
或许是默认成员初始值设定项:
Foo::f
(当然,该函数没有采用任何参数,所以我相应地改变了Foo m;
m.x = 5;
m.f();
的类型。)
lambda不能是&#34;类&#34;固有的,因为lambda引用类类型的对象,所以每个对象必须得到它自己的lambda。
用法:
inc
答案 1 :(得分:2)
没有任何上下文,你可以这样做
foo.f = [x=foo.x]() {
std::cout << x;
};