【发布时间】:2016-01-11 02:21:03
【问题描述】:
我写了一个函数来传递给第三方的类。静态函数可以正常工作,直到该函数需要访问私有成员变量才能完成其工作。我可以使用 lambda 表达式来做到这一点(假设它自动或通过转换转换为 std::function)。
例子:
void classA::doingThings()
{
...
classB::needsHelpToDoAThing(
[&](std::type foo) -> size_t { return myFunction(foo); }
);
...
}
size_t class::myFunction(type foo){
...
type someVar = m_somePrivateMember ...(some work)
...
}
但我真的不明白我在做什么。现在这个其他类正在使用来自不同类的私有成员变量。这不违反封装吗?这是 hack 还是我错过/误解了一个概念?
【问题讨论】:
-
本质上,您将
classA指针(隐藏在lambda 中)传递给classB::needsHelpToDoAThing,然后它转身并通过该指针调用classA的方法。当然,类的方法可以访问该类的任何成员。您也可以明确表示并将needsHelpToDoAThing以classA*作为参数。 -
不,“other”类没有使用“this”类的私有成员变量。另一个类正在调用作为“this”类成员的函数指针或函数对象,因此可以完全访问“this”类的私有成员和方法。
-
没有封装被破坏。一切顺利。和你一样。
-
感谢您为我分解它。用指针来解释它看起来更合理。
标签: c++ lambda encapsulation c++-concepts