Проблема захвата вложенной лямбды

Я скомпилировал это с помощью компилятора Visual Studio 2010, и у него есть проблемы с ошибками компилятора во вложенной лямбде, захватывающие переменные, уже захваченные первой лямбдой:

    Functor& fn, const WorkData& workData

    group.run([&fn, workData](){
    async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
    ProcessorResult result = fn.Process(workData);

    return result;
    });
});

Я получаю:

**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope

Кажется, компилятору не нравится, что я пытаюсь захватить внутри будущего экземпляра переменные, уже захваченные методом group.run().

Если я создаю локальные копии, все работает:

    group.run([&fn, workData](){
    Functor& fnlocal = fn;
    WorkData workDatalocal = workData;

    async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{
    ProcessorResult result = fnlocal.Process(workDatalocal);

    return result;
    });
});

Соответствует ли это поведение? Мне всегда нужно делать копии захваченных переменных, чтобы захватить одни и те же переменные во вложенной лямбде?

12
задан bernie 31 March 2012 в 20:11
поделиться