मैंने एक अंश के साथ और स्पष्टीकरण प्रदान करने की कोशिश की उपर्युक्त लिंक से जानकारी:
स्वयं द्वारा एक फ़ंक्शन टेम्पलेट एक प्रकार, या कोई फ़ंक्शन या कोई अन्य इकाई नहीं है। किसी स्रोत फ़ाइल से कोई कोड उत्पन्न नहीं होता है जिसमें केवल टेम्पलेट परिभाषाएं होती हैं। किसी भी कोड को प्रकट होने के लिए, एक टेम्पलेट को तत्काल किया जाना चाहिए: टेम्पलेट तर्कों को निर्धारित किया जाना चाहिए ताकि संकलक वास्तविक कार्य (या क्लास टेम्पलेट से कक्षा) उत्पन्न कर सके।
- समारोह टेम्पलेट का नाम देखने
- टेम्पलेट तर्क कटौती
यहाँ करने के लिए नीचे, संकलक उम्मीदवार समारोह के एक जोड़े हैं:
कि के लिए, संकलक माध्यम से चला जाता परिभाषाएं जो विशिष्ट फ़ंक्शन कॉल को संभाल सकती हैं। ये उम्मीदवार टेम्पलेट फ़ंक्शन के साथ-साथ प्रासंगिक गैर-टेम्पलेट फ़ंक्शन परिभाषाओं के instannces हैं।
लेकिन आपके सवाल का जवाब यहाँ तथ्य में निहित है:
खाका तर्क कटौती समारोह टेम्पलेट का नाम देखने (जो तर्क पर निर्भर देखने शामिल हो सकता है) और से पहले अधिभार संकल्प के बाद जगह लेता है।
तथ्य यह है कि फ़ंक्शन ओवरलोड रिज़ॉल्यूशन टेम्पलेट फ़ंक्शन इंस्टेंटेशन के बाद आपके कोड के आउटपुट का कारण बनता है।
अधिभार संकल्प:
अब आप अपने विशेष मामले के रूप में निम्नलिखित अधिभार संकल्प के माध्यम से चला जाता है
[पिछले] कदम एक से अधिक उम्मीदवार समारोह का उत्पादन करते हैं, तो ओवरलोड समाधान करने के लिए किया जाता है उस फ़ंक्शन का चयन करें जिसे वास्तव में बुलाया जाएगा। आम तौर पर, अभ्यर्थी कार्य करते हैं जिनके मानदंड तर्कों से मेल खाते हैं, जिन्हें सबसे अधिक निकटता कहा जाता है। । । ।
...
एफ 1 एफ 2 की तुलना में बेहतर कार्य करने के लिए निर्धारित किया गया है यदि एफ 1 के सभी तर्कों के लिए निहित रूपांतरण एफ 2, और
के सभी तर्कों के लिए अंतर्निहित रूपांतरण से भी बदतर नहीं हैं 1) एफ 1 का कम से कम एक तर्क है जिसका निहित रूपांतरण है F2
के उस तर्क के लिए संबंधित अंतर्निहित रूपांतरण से बेहतर ... ।
।
।
अंतर्निहित रूपांतरण दृश्यों के रैंकिंग:
मानक रूपांतरण अनुक्रम के प्रत्येक प्रकार के तीन पंक्तियां एक असाइन किया गया है:
1) सटीक मिलान: कोई रूपांतरण की आवश्यकता है, lvalue करने वाली rvalue रूपांतरण, योग्यता रूपांतरण, उपयोगकर्ता एक ही कक्षा के वर्ग प्रकार के निर्धारित रूपांतरण
2) संवर्धन: अभिन्न पदोन्नति, फ्लोटिंग प्वाइंट पदोन्नति
3) रूपांतरण: अभिन्न रूपांतरण, फ्लोटिंग प्वाइंट रूपांतरण, चल अभिन्न रूपांतरण, सूचक रूपांतरण, सूचक करने वाली सदस्य रूपांतरण , बूलियन रूपांतरण, व्युत्पन्न वर्ग के उपयोगकर्ता द्वारा परिभाषित रूपांतरण को इसके आधार पर ई
मानक रूपांतरण अनुक्रम के पद मानक रूपांतरण यह मानती है की श्रेणी का सबसे बुरा तर्क अभिव्यक्ति के लिए सीधे एक संदर्भ पैरामीटर के बाइंडिंग या तो है
(वहाँ तीन रूपांतरण हो सकता है) है पहचान या एक व्युत्पन्न-टू-बेस रूपांतरण:
struct Base {};
struct Derived : Base {} d;
int f(Base&); // overload #1
int f(Derived&); // overload #2
int i = f(d); // d -> Derived& has rank Exact Match
// d -> Base& has rank Conversion
// calls f(Derived&)
ठीक है, यहाँ एक अनुमान है: 'b' को' A' से विरासत है, लेकिन यह * नहीं * 'A' है। इसलिए, जब संकलक एक ओवरलोड रिज़ॉल्यूशन करता है, तो यह पहले 'बी' में ले जाने वाले फ़ंक्शन की तलाश करता है, और 'शून्य फू (कॉन्स ए और ए) 'इस मानदंड में फिट नहीं होता है। हालांकि, टेम्पलेट फ़ंक्शन * फिट * करता है, क्योंकि 'टी' * * बी * हो सकता है। तो, 'शून्य फू (कॉन्स टी एंड एक्स)' को प्राथमिकता दी जाती है। वैसे भी, यह पूरी तरह से 'अधिभार-रिज़ॉल्यूशन' टैग विवरण से मेल खाता है: * "... अनुभवी उपयोगकर्ताओं के लिए भी इसके नियम जटिल और अक्सर आश्चर्यजनक हैं।" * तो, इतना सच =) – Mints97
http: //en.cppreference का संदर्भ लें विस्तार के लिए .com/w/cpp/भाषा/sfinae। – oyjh