簡體   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