"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या `std::function` का टेम्पलेट तर्क वस्तु निर्माण के दौरान इसके प्रकार को प्रभावित करता है?

क्या `std::function` का टेम्पलेट तर्क वस्तु निर्माण के दौरान इसके प्रकार को प्रभावित करता है?

2024-12-13 को प्रकाशित
ब्राउज़ करें:417

Does the Template Argument of `std::function` Influence its Type During Object Construction?

क्या std::function का टेम्पलेट तर्क इसके प्रकार में शामिल है?

समस्या परिचय

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 और function दोनों का निर्माण एक सामान्य फ़ंक्शन पॉइंटर से किया जा सकता है। यह फ़ंक्शन के ओवरलोड के लिए कई संभावित मिलान प्रस्तुत करता है।

अस्पष्टता संकल्प

std::function के लिए टेम्पलेट तर्क के हस्ताक्षर को घोषणा और परिभाषा के दौरान इसके प्रकार का हिस्सा माना जाता है। हालाँकि, ऑब्जेक्ट निर्माण के दौरान ऐसा नहीं है।

std::function, C में कई कार्यात्मक ऑब्जेक्ट की तरह, टाइप इरेज़र नामक तकनीक का उपयोग करता है। यह इसे मनमानी वस्तुओं या कार्यों को स्वीकार करने में सक्षम बनाता है, जब तक कि वे बुलाए जाने पर अपेक्षित हस्ताक्षर को संतुष्ट करते हैं। नकारात्मक पक्ष यह है कि बेमेल हस्ताक्षरों से संबंधित त्रुटियां कंस्ट्रक्टर स्तर के बजाय कार्यान्वयन के भीतर ही होती हैं। ]

स्पष्ट प्रकार कास्टिंग

: फ़ंक्शन पॉइंटर्स को मैन्युअल रूप से आवश्यक विशिष्ट हस्ताक्षर पर कास्ट करें इरादा अधिभार। स्पष्ट से बचते हुए वांछित हस्ताक्षर के साथ एक फ़ंक्शन उत्पन्न करने के लिए टीएमपी का उपयोग करें कास्ट।

    निष्कर्ष
  • जबकि std::function का टेम्पलेट तर्क घोषणाओं और परिभाषाओं के दौरान इसके प्रकार को निर्धारित करता है, यह ऑब्जेक्ट निर्माण में कोई भूमिका नहीं निभाता है। जब कंस्ट्रक्टर मनमाने तर्क स्वीकार करते हैं तो इससे अस्पष्टता पैदा हो सकती है। इसे हल करने के लिए, प्रोग्रामर स्पष्ट प्रकार की कास्टिंग, फ़ंक्शन ऑब्जेक्ट रैपिंग, या टीएमपी का उपयोग कर सकते हैं।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3