我編這個使用Visual Studio 2010的編譯器,它有嵌套拉姆達捕獲由第一拉姆達已經捕獲的變量編譯器錯誤的問題:嵌套LAMBDA捕獲問題
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;
});
});
這種行爲是符合的?我總是需要製作捕獲的變量的副本,以便在嵌套的lambda上捕獲相同的變量?
OOG - 這樣的功能我沒有用C多大興趣的原因++ 11。 – 2012-03-31 20:10:21
:-)是的,但他們修復它 – Ghita 2012-03-31 20:10:51
他們修復*什麼*?我不是在談論編譯器錯誤,而是在談論附加在語言上的瑕疵。 – 2012-03-31 20:19:56