tôi đã biên soạn sử dụng Visual Studio 2010 biên dịch này và nó có vấn đề về lỗi biên dịch trên lambda lồng nhau chụp các biến bị bắt đã được cấp có lambda đầu tiên:Nested Lambda chụp vấn đề
Functor& fn, const WorkData& workData
group.run([&fn, workData](){
async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
ProcessorResult result = fn.Process(workData);
return result;
});
});
tôi nhận được:
**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope
Dường như trình biên dịch không giống như tôi cố gắng chụp bên trong ví dụ trong tương lai các biến đã được capture bởi phương thức group.run().
Nếu tôi có thể tạo bản sao địa phương hoạt động:
group.run([&fn, workData](){
Functor& fnlocal = fn;
WorkData workDatalocal = workData;
async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{
ProcessorResult result = fnlocal.Process(workDatalocal);
return result;
});
});
là hành vi này tuân thủ QTI? Tôi luôn luôn cần phải tạo bản sao của các biến bị bắt để nắm bắt các biến tương tự trên một lambda lồng nhau?
Văn phòng Chính phủ - các tính năng như thế này là lý do tôi không có lãi nhiều trong C++ 11. –
:-) Có, nhưng họ sửa chữa nó – Ghita
họ sửa chữa * những gì *? Tôi đã không nói về lỗi trình biên dịch, tôi đã nói về các mụn cóc gắn liền với ngôn ngữ. –