代码之家  ›  专栏  ›  技术社区  ›  norse

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

  •  0
  • norse  · 技术社区  · 9 年前

    我写了一个函数传递给第三方的类。静态函数运行良好,直到该函数需要访问私有成员变量才能完成其工作。我可以使用lambda表达式(假定它自动或通过强制转换转换为std::函数)来实现这一点。

    例子:

    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)
    ...
    }
    

    但我真的不明白我在做什么。现在,另一个类正在使用其他类中的私有成员变量。这不违反封装吗?这是一次黑客攻击还是我错过了/误解了一个概念?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Yakk - Adam Nevraumont    9 年前

    封装是这样一种想法,即其他代码不会随意在你的内脏中游荡。

    在这里,您创建了一个助手函数,可以在您的内脏中四处探查。此助手函数是 部分 即使你把它传给别人。

    这与访问私有数据的成员方法一样,不会破坏封装。虽然它不是显式的类接口的一部分,但它仍然是实现的一部分。