我希望能够在两个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'中。 –