gpt4 book ai didi

c++ - lambda 可以是类固有的吗

转载 作者:行者123 更新时间:2023-11-30 01:08:32 25 4
gpt4 key购买 nike

对于一个在类 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);
}

有什么解决办法吗?

最佳答案

自然的方法是使用构造函数:

struct Foo {
Foo() : f([this](){ std::cout << x; }) {}

int x;
std::function<void()> f;
};

或者可能是一个默认的成员初始值设定项:

struct Foo {
int x;
std::function<void()> f = [this]() { std::cout << x; };
};

(当然,该函数不接受任何参数,所以我相应地更改了 Foo::f 的类型。)

lambda 不能是“类固有的”,因为 lambda 指的是类类型的对象,所以每个对象都必须有自己的 lambda。

用法:

Foo m;
m.x = 5;
m.f();

关于c++ - lambda 可以是类固有的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com