簡體   English   中英

嵌套的Lambda捕獲問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM