std::function टेम्पलेट को नियोजित करते समय, अस्पष्टता कई प्रशंसनीय अधिभार के कारण उत्पन्न हो सकता है। विशेष रूप से, निम्नलिखित कोड स्निपेट पर विचार करें:
#include
using namespace std;
int a(const function& f) { return f(); }
int a(const function& f) { return f(0); }
int x() { return 22; }
int y(int) { return 44; }
int main() {
a(x); // Call is ambiguous.
a(y); // Call is ambiguous.
}
अस्पष्टता इस तथ्य से उत्पन्न होती है कि function
std::function के लिए टेम्पलेट तर्क के हस्ताक्षर को घोषणा और परिभाषा के दौरान इसके प्रकार का हिस्सा माना जाता है। हालाँकि, ऑब्जेक्ट निर्माण के दौरान ऐसा नहीं है।
std::function, C में कई कार्यात्मक ऑब्जेक्ट की तरह, टाइप इरेज़र नामक तकनीक का उपयोग करता है। यह इसे मनमानी वस्तुओं या कार्यों को स्वीकार करने में सक्षम बनाता है, जब तक कि वे बुलाए जाने पर अपेक्षित हस्ताक्षर को संतुष्ट करते हैं। नकारात्मक पक्ष यह है कि बेमेल हस्ताक्षरों से संबंधित त्रुटियां कंस्ट्रक्टर स्तर के बजाय कार्यान्वयन के भीतर ही होती हैं। ]
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3