2012-03-31 16 views
12

he recopilado esta utilizando Visual Studio 2010 compilador y tiene problemas de error del compilador en lambda anidada captura de las variables ya captadas por la primera lambda:anidada Lambda tema de captura

Functor& fn, const WorkData& workData 

    group.run([&fn, workData](){ 
    async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{ 
    ProcessorResult result = fn.Process(workData); 

    return result; 
    }); 
}); 

me sale:

**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope 

Parece que al compilador no le gusta que intente capturar dentro de la instancia futura las variables ya capturadas por el método group.run().

Si creo copias locales funciona:

group.run([&fn, workData](){ 
    Functor& fnlocal = fn; 
    WorkData workDatalocal = workData; 

    async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{ 
    ProcessorResult result = fnlocal.Process(workDatalocal); 

    return result; 
    }); 
}); 

¿Es este comportamiento conformes? Siempre necesito hacer copias de las variables capturadas para capturar las mismas variables en una lambda anidada.

+0

oog - características de este tipo son la razón por la que no tengo mucho interés en C++ 11. –

+0

:-) Sí, pero lo arreglan – Ghita

+0

arreglan * qué *? No estaba hablando del error del compilador, estaba hablando de las verrugas adjuntas al lenguaje. –

Respuesta

4

No concuerda con el borrador final, pero es conforme a la redacción en el momento en que se implementaron, es decir, no es realmente un defecto de VS pero tampoco es exactamente estándar. La próxima versión, coloquialmente conocida como vNext, tendrá una implementación actualizada para usar la última redacción.

Cuestiones relacionadas