[英]Nested Lambda capture issue
我使用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;
});
});
我明白了:
**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上捕獲相同的變量?
這是Visual Studio 2010 C ++編譯器的已知限制。 這是跟蹤它的連接問題
它目前在下一版本中標記為已修復
這不符合性的最終草案,但它是否符合特定的措辭在它們被實施的情況,即,它不是一個真正的VS缺陷的時間,但也不是確切的標准。 下一個版本,通俗地稱為vNext,將更新實現以使用最新的措辭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.