खोज…


टिप्पणियों

  • समान नाम, समान प्रकार के बावजूद, एक सामान्य फ़ंक्शन फ़ंक्शन टेम्पलेट से संबंधित नहीं है।
  • सामान्य फ़ंक्शन कॉल और एक उत्पन्न फ़ंक्शन टेम्पलेट कॉल भले ही समान नाम, समान वापसी प्रकार और समान तर्क सूची साझा करते हैं

ओवरलोडिंग एक वैध फ़ंक्शन टेम्प्लेट है?

फ़ंक्शन टेम्पलेट को गैर-टेम्पलेट फ़ंक्शन ओवरलोडिंग (समान नाम, लेकिन अलग-अलग पैरामीटर प्रकार) के नियमों के तहत ओवरलोड किया जा सकता है और इसके अलावा, ओवरलोडिंग वैध है यदि

  • वापसी का प्रकार अलग है, या
  • टेम्प्लेट पैरामीटर सूची भिन्न होती है, मापदंडों के नामकरण और डिफ़ॉल्ट तर्कों की उपस्थिति के अलावा (वे हस्ताक्षर का हिस्सा नहीं हैं)

एक सामान्य फ़ंक्शन के लिए, कंपाइलर के लिए दो पैरामीटर प्रकारों की तुलना करना आसान है, क्योंकि इसमें सभी सूचनाएँ हैं। लेकिन एक टेम्पलेट के भीतर एक प्रकार अभी तक निर्धारित नहीं किया जा सकता है। इसलिए, जब दो पैरामीटर प्रकार समान होते हैं, तो नियम यहां अनुमानित है और कहता है कि गैर-निर्भर प्रकार और मूल्यों का मिलान करने की आवश्यकता है और निर्भर प्रकारों और अभिव्यक्तियों की वर्तनी समान होने की आवश्यकता है (अधिक सटीक, उन्हें अनुरूप करने की आवश्यकता है तथाकथित ODR- नियम), सिवाय इसके कि टेम्प्लेट मापदंडों का नाम बदला जा सकता है। हालांकि, अगर इस तरह के अलग-अलग वर्तनी के तहत, प्रकारों के भीतर दो मानों को अलग-अलग माना जाता है, लेकिन हमेशा समान मानों के लिए त्वरित होगा, ओवरलोडिंग अमान्य है, लेकिन संकलक से कोई निदान आवश्यक नहीं है।

template<typename T>
void f(T*) { }

template<typename T>
void f(T) { }

यह एक वैध अधिभार है, क्योंकि "टी" और "टी *" अलग-अलग वर्तनी हैं। लेकिन निम्नलिखित अमान्य है, कोई निदान आवश्यक नहीं है

template<typename T>
void f(T (*x)[sizeof(T) + sizeof(T)]) { }

template<typename T>
void f(T (*x)[2 * sizeof(T)]) { }


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow