我写了一个函数传递给第三方的课程。静态函数工作正常,直到函数需要访问私有成员变量才能完成其工作。我可以使用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)
...
}
但我真的不明白我在做什么。现在这个其他类正在使用来自不同类的私有成员变量。这不违反封装吗?这是一个黑客还是我错过/误解了一个概念?
答案 0 :(得分:1)
封装是一种想法,其他代码不会随便在你的内脏中徘徊。
在这里,您创建了一个可以在内部挖掘的辅助函数。这个辅助函数是你内部的部分,即使你将它传递给其他人。
这不会破坏封装,而不是访问私有数据的成员方法。虽然它不是明确的类接口的一部分,但它仍然是实现的一部分。