2012-03-31 16 views
12

मैं इस का उपयोग करते हुए दृश्य स्टूडियो 2010 संकलक तैयार की है और यह नेस्टेड लैम्ब्डा चर पहले लैम्ब्डा द्वारा पहले से ही कब्जा कर लिया पर कब्जा करने पर संकलक त्रुटि मुद्दे हैं:नेस्टेड लैम्ब्डा कब्जा मुद्दा

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; 
    }); 
}); 

इस व्यवहार अनुरूप है? नेस्टेड लैम्ब्डा पर एक ही चर को कैप्चर करने के लिए मुझे हमेशा कैप्चर किए गए चर की प्रतियां बनाने की आवश्यकता होती है?

+0

OOG - इस जैसी सुविधाओं के कारण मैं सी में ज्यादा रुचि नहीं है ++ 11। –

+0

:-) हां, लेकिन वे इसे – Ghita

+0

ठीक करते हैं * वे * क्या * ठीक करते हैं? मैं कंपाइलर बग के बारे में बात नहीं कर रहा था, मैं भाषा से जुड़ी मौसा के बारे में बात कर रहा था। –

उत्तर

13

यह विजुअल स्टूडियो 2010 सी ++ कंपाइलर की एक ज्ञात सीमा है। यहाँ पर नज़र रखने के लिए यह

यह वर्तमान रूप में चिह्नित है अगले संस्करण में ठीक के रूप में कनेक्ट मुद्दा है

4

यह अंतिम मसौदा करने के लिए अधिक से अधिक अनुरूप नहीं है, लेकिन यह शब्दों के अनुरूप समय, जिस पर वे थे implemented- यानी, वह वास्तव में एक वी.एस. दोष नहीं है पर है लेकिन न तो यह वास्तव में मानक है। अगले संस्करण, जिसे बोलने के रूप में जाना जाता है, को नवीनतम शब्द का उपयोग करने के लिए एक क्रियान्वयन अद्यतन किया जाएगा।

संबंधित मुद्दे