[英]How can I use a private member variable in a non-member function, when the variable happens to be a pointer?
[英]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.