Friday, 15 May 2015

c++ - A template function and a non-template overload of this function, which is a best match? -


कोड निम्न प्रकार से होता है:

  टेम्पलेट & class; InputIterator, class OutputIterator & gt; इनलाइन आउटपुट इटरेटर प्रतिलिपि (InputIterator सबसे पहले, InputIterator, अंतिम, आउटपुट इटेरेलेटर परिणाम) {वापसी __copy_dispatch & lt; InputIterator, OutputIterator & gt; () (प्रथम, अंतिम, परिणाम); } / / एक अधिभार संस्करण इनलाइन चार * प्रतिलिपि (const char * पहले, const char * last, char * परिणाम) {memmove (परिणाम, पहले, अंतिम - पहले); रिटर्न परिणाम + (अंतिम - पहले); }   

अगर मैं कॉपी (int *, int *) को कॉल करता हूं, जो सबसे अच्छा मेल है, क्या कम्पाइलर एक नया फ़ंक्शन उपयोग को int * टेम्पलेट पैरामीटर के रूप में, या int * को char * में कनवर्ट किया जाएगा।

और अगर मैं copy पर कॉल करता हूं ( चार [], चार []) नोटिस मैं सिर्फ पैरामीटर के प्रकार को ध्यान में रखने के लिए char [] का उपयोग करता हूं।

चूंकि int * को char * के लिए परस्पर रूप से परिवर्तनीय नहीं है और न ही const char * के लिए परिवर्तनीय नहीं है टेम्पलेट फ़ंक्शन को बुलाया जाएगा। टेम्पलेट फ़ंक्शन को निकालने के परिणामस्वरूप समय त्रुटि संकलित हो जाएगी।

सुझाव: कंपाइलर के साथ खेलने के लिए बहुत अच्छा मूल्य है आप

  std :: cout & lt; & lt; जैसे लाइन जोड़ सकते हैं। "टेम्पलेट फ़ंक्शन बुलाया। \ N";   

अपने अधिभार में या उस प्रकार की सामग्री को करने के लिए डिबगर का उपयोग करें यह एक महान सीखने का अनुभव है आप परिचय के लिए कुछ सी ++ किताबें भी पढ़ सकते हैं।

No comments:

Post a Comment