嵌套的lambda捕获在Visual Studio 2010中不起作用

u3r8eeie  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(129)

我使用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

编译器似乎不喜欢我试图在future示例中捕获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中捕获相同的变量。

polkgigr

polkgigr1#

这是Visual Studio 2010 C++编译器的一个已知限制。下面是跟踪它的连接问题

它目前被标记为在下一个版本中修复

fv2wmkja

fv2wmkja2#

它不符合最终草案,但它 * 是 * 符合当时的措辞,他们被实现-即,这不是一个真正的VS缺陷,但也不完全是标准。下一个版本,俗称vNext,将有一个更新的实现,以使用最新的措辞。

相关问题