ho compilato questo utilizzando Visual Studio 2010 compilatore e ha problemi di errore del compilatore su lambda nidificato catturare le variabili catturati già dal primo lambda:nidificati Lambda problema di cattura
Functor& fn, const WorkData& workData
group.run([&fn, workData](){
async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
ProcessorResult result = fn.Process(workData);
return result;
});
});
ottengo:
**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope
Sembra che al compilatore non piaccia che cerco di catturare all'interno del futuro istanza le variabili acquisite già dal metodo group.run().
Se creo copie locali funziona:
group.run([&fn, workData](){
Functor& fnlocal = fn;
WorkData workDatalocal = workData;
async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{
ProcessorResult result = fnlocal.Process(workDatalocal);
return result;
});
});
È questo comportamento conforme? Ho sempre bisogno di fare copie delle variabili catturate per catturare le stesse variabili su un lambda annidato?
oog - caratteristiche come questa sono la ragione non ho molto interesse in C++ 11. –
:-) Sì, ma lo aggiustano – Ghita
riparano * cosa *? Non stavo parlando del bug del compilatore, stavo parlando delle verruche legate alla lingua. –