एक वस्तु को जीवित रखने की कोशिश कर रहा है (लेकिन shared_ptr संदर्भित करने के लिए ऐसा करने के लिए की जरूरत नहीं) मुझे लगने इस तरह सामान लेखन: दृश्य स्टूडियो कि कहा कि मैं प्रतिलिपि नहीं कर सके में एक त्रुटिसी ++: क्या आप लैम्ब्डा निहित प्रति कैप्चर प्लस स्पष्ट कॉपी कैप्चर कर सकते हैं?
void ClassDerivedFromSharedFromThis::countdown(ThreadPool &pool, std::string name){
auto self = shared_from_this();
pool.then([=, self]{
for(int i = 0;i < 10;++i){
atomic_cout() << "Hey [" << name << "]! Our counter is: " << atomicCounter++ << "\n";
}
});
}
लेकिन तब मिला -capture स्पष्ट रूप से, क्योंकि मैं पहले से ही परोक्ष कॉपी-कब्जा करने गया था ... यह मैं लिखने के लिए मजबूर:
void countdown(ThreadPool &pool, std::string name){
auto self = shared_from_this();
pool.then([=]{
self; //Capture self.
for(int i = 0;i < 10;++i){
atomic_cout() << "Hey [" << name << "]! Our counter is: " << atomicCounter++ << "\n";
}
});
}
मैं इस काम करता है, लेकिन यह गलत लगता है। चूंकि मुझे केवल shared_ptr स्वामित्व के दुष्प्रभाव की आवश्यकता है और इसे सीधे संदर्भित करने की आवश्यकता नहीं है, इसलिए मैं इसे लैम्ब्डा बॉडी के बजाय कैप्चर सूची में व्यक्त करना चाहता हूं।
मेरे असली कोड में मेरे पास नेटवर्क कोड में कुछ नेस्टेड लैम्ब्डा में कैप्चर करना चाहता था और लगभग कैप्चर करना आसान था और संपादित करने के लिए आसान तरीका था।
मेरा प्रश्न है: क्या यह मानक व्यवहार या विजुअल स्टूडियो 2015 का लैम्ब्डा कैप्चर सीमाओं पर अपना स्वयं का लेना है? मानक के नए संस्करण इस के लिए अनुमति देते हैं, या किसी ने इसके बारे में बात की है?
'[यह, स्वयं]' के बारे में कैसे? –
या 'स्वयं-> परमाणु काउंटर ++ '। – Jarod42
[यह, स्वयं] ठीक होगा, सिवाय इसके कि मुझे 3 पैरामीटर पसंद हैं जो मैं भी कैप्चर करना चाहता था, इसलिए ऐसा लगता है: [यह, स्वयं, पी 1, पी 2, पी 3] जो मैंने वास्तव में पहले किया था, लेकिन फिर फैसला किया [=] {self; ...} @ kerrekSB – M2tM