我希望能夠在兩個lambda函數之間共享包含範圍內的變量。我有以下幾點:在兩個lambda之間共享變量
void holdAdd(const Rect& rectangle, Hold anonymousHeld, Hold anonymousFinish) {
std::map<int,bool> identifierCollection;
HoldFinish holdFinish = [=](const int& identifier) mutable {
if (identifierCollection.count(identifier) == 0) return;
identifierCollection.erase(identifier);
anonymousFinish();
};
holdCollisionCollection.push_back([=](const int& identifier, const Vec2& point) mutable {
if (rectangle.containsPoint(point)) {
identifierCollection[identifier] = true;
anonymousHeld();
} else {
holdFinish(identifier);
}
});
holdFinishCollection.push_back(holdFinish);
}
我可以在holdFinish
指向不同的實現的identifierCollection
比第二拉姆達功能調試器看到的。
如果我使用[=, &identifierCollection]
它會拋出EXC_BAD_ACCESS
,不管我是否使用mutable
。
我對使用內聯函數的其他語言的經驗是,這應該是可能的。例如在javascript中:
var a = 10;
var b = function() {
a += 2;
}
var c = function() {
a += 3;
}
b();
c();
alert(a);
會提醒15
。
我需要做什麼才能讓兩個lambda函數引用相同的identifierCollection實現?因此,它的行爲與javascript示例相同。
所以問題是,當你按值捕獲你已經捕獲的價值,當你通過引用捕獲你已經捕獲了一個懸浮的引用本地變量....你必須決定你想要的對象的生命週期。 –
有沒有'[&]'工作?嘗試使地圖'靜態' – twentylemon
將地圖包裹在'shared_ptr'中。 –