C++ 闭包捕获变量

C++ closure capture variable

提问人:user3674011 提问时间:10/7/2021 最后编辑:wohlstaduser3674011 更新时间:5/13/2022 访问量:235

问:

在 Cow() 函数中。我正在尝试捕获闭合的可变重量。但它不能正常工作。可变重量不会捕获到瓶盖上。当我尝试运行getWeight()函数时。它返回一个未初始化的值。此外,setWeight() 不起作用。

#include <iostream>

struct Mammal {
  std::function<void()> speak;
  std::function<int()> getWeight;
  std::function<void(int)> setWeight;
};

Mammal *Cow() {
    int weight = 100;

    auto *m = new Mammal();
    m->speak = []() { puts("momo~~ momo~~"); };
    m->getWeight = [&]() { return weight; };;
    m->setWeight = [&](int w) { weight = w; };

    return m;
}

int main() {
    Mammal *c = Cow();
    std::cout << "Cow Weight: " << c->getWeight() << '\n';

    c->setWeight(200);
    std::cout << "Cow New Weight: " << c->getWeight() << '\n';
}
C++ 闭包

评论

2赞 chris 10/7/2021
你想让那个体重住在哪里?
0赞 Louis Go 10/7/2021
根据您的描述,应该是类成员变量而不是局部变量。并且似乎不是创建 .对于这种情况,一个类应该就足够了,没有任何weightMammal *Cow()Mammalstd::function
0赞 user3674011 10/7/2021
@chris我想在哺乳动物物体中捕获寿命。
0赞 user3674011 10/7/2021
@LouisGo 是的。我不会在实际的工程项目中这样做。我演示了这一点,只是想知道闭包如何与 oop 多态性一起工作。
1赞 chris 10/7/2021
我不知道你说的捕捉一生是什么意思。目前,当函数调用结束时超出范围,并且该内存被重新用于其他堆栈目的。你将不得不选择一个可以比函数调用更长久的地方,无论是自由存储、闭包对象还是每个类对象(在这种情况下,使其成为普通数据成员)。weight

答: 暂无答案