5

मानक पुस्तकालय जेनेरिक एल्गोरिदम के अनुमानित और गैर-अनुमानित संस्करणों को अलग करता है। उदाहरण के लिए, std::sort() लगता है:जेनेरिक एल्गोरिदम के लिए अनुमानित और गैर-अनुमानित संस्करणों को अलग क्यों करें?

template< class RandomIt > 
void sort(RandomIt first, RandomIt last); 

template< class RandomIt, class Compare > 
void sort(RandomIt first, RandomIt last, Compare comp); 

सिर्फ निम्नलिखित लिखित रूप में किसी भी समस्या है?

template< class RandomIt, class Compare = std::less<void>> 
void sort(RandomIt first, RandomIt last, Compare comp = Compare{}); 
+11

सी ++ 03 में फ़ंक्शन टेम्पलेट्स के लिए डिफ़ॉल्ट टेम्पलेट तर्क जैसी कोई चीज़ नहीं थी। –

+0

@ टी.सी. तो, मान लें कि हम पूरी चीज को फिर से डिजाइन करते हैं, क्या दूसरे फॉर्म को प्राथमिकता दी जानी चाहिए? – Lingxi

+0

@ टी.सी. मुझे विश्वास है कि डिफ़ॉल्ट टेम्पलेट तर्क चीज वास्तव में एक जवाब है। – Angew

उत्तर

8

बहुत अधिक ऐतिहासिक कारण।

सी ++ 98/03 में फ़ंक्शन टेम्पलेट्स के लिए डिफ़ॉल्ट टेम्पलेट तर्क नहीं थे, इसलिए इसे दो ओवरलोड का उपयोग करना पड़ा। और बाद में इसे बदलना उपयोगकर्ता कोड तोड़ सकता है।

तो, मान लें कि हम पूरी चीज को फिर से डिजाइन कर सकते हैं, दूसरे फॉर्म को प्राथमिकता दी जानी चाहिए?

यही है current Ranges TS working draft करता है।

संबंधित मुद्दे

 संबंधित मुद्दे