1

我有以下代码:

class A
{
protected:
    int a
public:
    std::function<void()> lambdaFunc;
    A(std::function<void()> lambdaParam) : lambdaFunc(lambdaParam){}
};

int main()
{
    someFunctionCall(std::shared_ptr<A>(new A([](){ /*I need this to access int a*/  }));
}

我不确定如何让这个实例中的 lambda 函数访问新对象?

4

1 回答 1

1

我建议您将this指针显式传递给函数,如下所示(我冒昧地a公开并将其初始化为 0,以简化事情,但这与您的问题无关):

#include <iostream>
#include <functional>
#include <memory>

    class A
    {
    public:
      int a;
    public:
      std::function<void(A& self)> lambdaFunc;
      A(std::function<void(A& self)> lambdaParam) : lambdaFunc(lambdaParam), a(0)
      { /* nothing */ }
    };

    void someFunctionCall(std::shared_ptr<A> p)
    {
      std::cout << p->a << std::endl;
      p->lambdaFunc(*p);
      std::cout << p->a << std::endl;
    }

    int main()
    {
      someFunctionCall(std::shared_ptr<A>(new A([](A&self){ self.a=42; })));
    }

然后,为一个对象调用函数,a你必须编写a.lambdaFunc(a),但如果你认为不方便,你可以将它包装在一个方法中。

该程序(在 C++11 中)打印 0,然后打印 42。

于 2013-08-31T13:41:51.093 回答