繁体   English   中英

当传递的lambda使用私有成员变量时,它们是否违反封装?

[英]Does passing lambdas violate encapsulation when they use a private member variable?

我编写了一个传递给第三方课程的函数。 静态函数可以正常工作,直到该函数需要访问私有成员变量以完成其工作为止。 我可以使用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吗,还是我缺少/误解了一个概念?

封装是这样的想法,即其他代码不会在您的内心里随意地乱搞。

在这里,您创建了一个可以在内部查看的辅助函数。 即使您将其传递给其他人,该辅助功能也是您内在的一部分

这不比访问私有数据的成员方法破坏封装。 虽然它不是明确地属于类的接口的一部分,但仍是实现的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM