使用C ++中的lambdas管理对象生存期

时间:2012-01-23 19:42:19

标签: c++ visual-c++ lambda c++11

我有以下代码(大大简化):

#include<functional>
std::function<int()> Count() {
    int x = 0;
    return [=]() mutable { return x++; };
}

std::function<int()> Negate(std::function<int()> x) {
    return [=]() { return -x(); };
}

int main() {
    std::function<int()> n;
    int z = 0;
    if (true) {
        auto c = Count();
        z = c();
        n = Negate(c);
        z = n();
        z = n();
    }
    z = n();
    z = n();
}

我的问题是,对n的调用仅在if语句中有效。一旦if失去范围,c就会被破坏而n停止工作。有没有明智的方法来解决这个问题?优选非侵入性的。

0 个答案:

没有答案