我有以下代码:
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函数访问新对象?
答案 0 :(得分: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。