[英]C++ lambda - capture member variable
我有一個類,它具有指向內核函數的函數指針,可以從外部改變。
class Bar
{
public:
int i;
}
class Foo
{
public:
std::function<double()> kernel;
Bar bar;
};
int main()
{
Foo f;
f.kernel = []() -> double { return i * i; }; //this is not working obviously
}
我怎樣才能實現“呈現”的行為,例如。 讀取lambda中的類變量。 我可以通過傳入f
並且寫入f.bar.i
來繞過它,但這不是一個很好的解決方案。
在C ++ 14中你可以把它寫成,
f.kernel = [&i = f.bar.i]() -> double { return i * i; };
如果你沒有C ++ 14,你也可以創建另一個變量,
int &i = f.bar.i;
f.kernel = [&i]() -> double { return i*i; };
雖然傳遞f
和寫f.bar.i
沒什么不對。
看來你不能這樣做 。 沒有構造來創建成員函數lambda。
但你可能可以按照@ KerrekSB的建議,除了調度之外,還可以獲得成員函數:
class Foo
{
public:
double kernel()
{
_kernel(*this);
}
std::function<double(Foo &)> _kernel;
};
Foo f;
f._kernel = [](Foo &f) -> double { return f.i * f.i; };
f.kernel()
請注意,您不能將這兩個字段命名為kernel
。
lambda函數不知道i或Bar。 怎么會知道? 您需要傳遞參考。 如果你以不同的方式定義函數體,那么你可以將i作為參數傳遞,並在類中調用它,你應該得到你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.