में lambda के लिए std :: unique_ptr "move by" कैप्चर करने के लिए कैसे करें I C++ 11 में नई विशेषताएं सीख रहे हैं और इस समस्या से आ गए हैं। मैं for_each के लिए तर्क के रूप में इसे लैम्ब्डा के अंदर ले जाकर एक अद्वितीय_ptr को कैप्चर करना चाहता हूं।std :: for_each
की स्थापना:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
प्रयास 1 - क्योंकि unique_ptr एक प्रति निर्माता नहीं है काम नहीं करता। सी ++ 0x चाल वाक्यविन्यास द्वारा पास निर्दिष्ट नहीं करता है।
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
प्रयास 2 - उपयोग बाँध एक समारोह के लिए पी के लिए ले जाया गया प्रतिलिपि बाध्य करने के लिए है कि पूर्णांक & लेता है:
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
संकलक शिकायत है कि 'result' : symbol is neither a class template nor a function template.
व्यायाम का मुख्य उद्देश्य के लिए है समझें कि बाद में उपयोग के लिए कैश किए गए लैम्ब्डा में एक जंगम चर कैसे पकड़ा जाए।
यह प्रश्न पहले ही पूछा जा चुका है [यहां] (http://stackoverflow.com/q/8640393/20984)। हालांकि, मैं बंद करने के लिए वोट नहीं देता क्योंकि आपके प्रश्न में एक वैकल्पिक (हालांकि काम नहीं कर रहा) समाधान है। –
यह भी देखें [यहां] (http://stackoverflow.com/q/8236521/20984)। –