如何从lambda访问静态成员?
class A
{
public:
A(std::function<void()> f)
{
f();
}
};
class B
{
private:
friend class A;
static bool c;
};
bool B::c = false;
A a([]() { B::c = true; });
此代码给出了错误C2248:
'B :: c':无法访问类'B'中声明的私有成员
答案 0 :(得分:2)
您无法在此处访问lambda中的静态成员。
您将班级A
标记为朋友,但您创建的lambda与A
或B
直接无关 - 它有自己的类型,当然,它不是B
的朋友。这就是您尝试访问B::c
时出错的原因。
您可以考虑从B::c
构造函数中将f
传递给A
作为替代方法:
class A;
class B
{
private:
friend class A;
static bool c;
};
bool B::c = false;
class A
{
public:
A(std::function<void(bool&)> f)
{
f(B::c);
}
};
A a([](bool& value) { value = true; });