Я скомпилировал это с помощью компилятора 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;
});
});
Согласуется ли это поведение? Мне всегда нужно делать копии захваченных переменных, чтобы фиксировать одни и те же переменные на вложенной лямбда?