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