我在類的成員函數的局部變量上使用std::for_each
循環。我想從for_each中的lambda調用同一個類的另一個成員函數。下面是什麼,我試圖做一個簡單的例子:捕獲這個訪問成員函數所需的東西嗎?
void some_class::another_function()
{
cout << "error";
}
void some_class::some_function(function<bool(const int)> &f)
{
vector<int> local_variable = {0,0,0,1,1,3,5,43};
std::for_each(local_variable.begin(), local_variable.end(),
[&f](const int item)
{
if(!f(item))
another_function();
}
}
GCC 4.6是告訴我,this
沒有捕獲(所以我應該這樣做)。這是最好的解決方案嗎?或者我應該只捕獲我需要的那些功能(但對於較大的構造,這可能會很麻煩)?
代替明確地捕獲'this',他可以使用[&]通過引用捕獲所有內容。這是一個使用'std :: for_each'的本地函數;沒有理由不通過引用捕獲所有內容,並可能將編譯器生成的仿函數優化爲簡單的函數指針。 –
只捕獲** nothing **的lambda可以簡化爲函數指針。但是,不管捕獲集是什麼,lambda都將是一個帶有內聯函數調用操作符的類,並且可能直接內聯到'std :: for_each'循環中。使用'[&]'捕獲所有內容肯定比輸入每個變量的輸入要少。 –