जेनेरिक std::function ऑब्जेक्ट्स में सदस्य फ़ंक्शन पॉइंटर्स को संग्रहीत करना
जब मानचित्र का उपयोग करके किसी विशेष वर्ग के सदस्य फ़ंक्शन पॉइंटर्स को संग्रहीत करने का प्रयास किया जाता है std::function ऑब्जेक्ट, डेवलपर्स को एक त्रुटि का सामना करना पड़ सकता है: "शब्द 0 तर्क लेने वाले फ़ंक्शन का मूल्यांकन नहीं करता है।" सदस्य फ़ंक्शन पॉइंटर को सीधे std::function ऑब्जेक्ट पर असाइन करते समय यह त्रुटि उत्पन्न होती है।
समस्या की जड़ इस तथ्य में निहित है कि गैर-स्थैतिक सदस्य फ़ंक्शन को पहले तर्क के रूप में एक अंतर्निहित "इस" पॉइंटर की आवश्यकता होती है . इसे सुधारने के लिए, पहला तर्क स्पष्ट रूप से बाध्य होना चाहिए।
Solution:
std::functionf = std::bind(&Foo::doSomething, this);
यह दृष्टिकोण प्रभावी ढंग से "इस" सूचक को पहले तर्क के रूप में बांधता है, जिससे std::function ऑब्जेक्ट की अनुमति मिलती है सदस्य फ़ंक्शन को सही ढंग से कैप्चर करने के लिए। &&&]
नेमस्पेस std::प्लेसहोल्डर्स का उपयोग करना; std::functionC 11 Lambda Syntax:
यदि कंपाइलर C 11 लैम्ब्डा का समर्थन करता है, तो अधिक संक्षिप्त दृष्टिकोण का उपयोग किया जा सकता है:using namespace std::placeholders; std::functionstd::functionf = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
इन तकनीकों का पालन करके, डेवलपर्स सामान्य std::function ऑब्जेक्ट का उपयोग करके सदस्य फ़ंक्शन पॉइंटर्स को प्रभावी ढंग से स्टोर और इनवॉक कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3