[英]C++ Lambda capture private class member
這是我班級的一部分:
//...
bool dump_dvars()
{
fstream& refvar{ output_file };
for_each(_array_start, _array_start + *_array_size,
[&refvar](const void* dvar) -> void
{
//work with output_file
});
return true;
}
private:
void** _array_start;
unsigned int* _array_size;
fstream output_file;
};
我想訪問我的Lambda的私有成員變量output_file,它位於公共成員函數dump_dvars中。 當我捕獲這個指針時,我無法訪問該變量,因為它是私有的,我也不想讓它公開! 我已經讀過這個問題( 如何讓lambda成為一個類的朋友? )但我不想創建另一個函數。 所以我目前解決的問題是創建對私有成員的引用,並通過引用捕獲列表將該變量傳遞給我的Lambda。
這是一個很好的解決方案和良好的風格還是有更好的解決方案?
你應該在lambda中捕獲'this'。
以下代碼編譯並適用於g ++,clang,VS2010和VS2013。
#include <iostream>
class A
{
public:
A() : x(5){}
void f() const
{
([this]()
{
std::cout << x << std::endl;
})();
}
private:
int x;
};
int main()
{
A a;
a.f();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.