当使用私有成员变量时,传递 lambda 是否违反封装?
Does passing lambdas violate encapsulation when they use a private member variable?
我写了一个函数传递给第三方的class。静态函数工作正常,直到该函数需要访问私有成员变量才能完成其工作。我可以使用 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)
...
}
但我真的不明白我在做什么。现在另一个 class 正在使用来自另一个 class 的私有成员变量。这不违反封装吗?这是黑客还是我 missing/misunderstanding 一个概念?
封装是指其他代码不会在您的内部乱窜 willy-nilly。
在这里,您创建了一个可以在您的内脏中四处游荡的辅助函数。这个辅助函数是你内脏的部分,即使你把它传给了别人。
与访问私有数据的成员方法一样,这不会破坏封装。虽然它不是 class 接口的一部分,但它仍然是实现的一部分。
我写了一个函数传递给第三方的class。静态函数工作正常,直到该函数需要访问私有成员变量才能完成其工作。我可以使用 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)
...
}
但我真的不明白我在做什么。现在另一个 class 正在使用来自另一个 class 的私有成员变量。这不违反封装吗?这是黑客还是我 missing/misunderstanding 一个概念?
封装是指其他代码不会在您的内部乱窜 willy-nilly。
在这里,您创建了一个可以在您的内脏中四处游荡的辅助函数。这个辅助函数是你内脏的部分,即使你把它传给了别人。
与访问私有数据的成员方法一样,这不会破坏封装。虽然它不是 class 接口的一部分,但它仍然是实现的一部分。