我建议您将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。