Ghi*_*ita 12 c++ lambda visual-studio-2010 visual-studio c++11
我使用Visual Studio 2010编译器编译了它,它在嵌套的lambda上有编译器错误问题,捕获第一个lambda已捕获的变量:
Functor& fn, const WorkData& workData
group.run([&fn, workData](){
async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
ProcessorResult result = fn.Process(workData);
return result;
});
});
Run Code Online (Sandbox Code Playgroud)
我明白了:
**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope
Run Code Online (Sandbox Code Playgroud)
似乎编译器不喜欢我尝试在未来实例中捕获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;
});
});
Run Code Online (Sandbox Code Playgroud)
这种行为符合吗?我总是需要复制捕获的变量,以便在嵌套的lambda上捕获相同的变量?