C ++ में प्रोग्रामिंग(Programming) के मॉड्यूल(module) 39 में आपका स्वागत है। हम C ++ में टेम्पलेट(template) या जेनेरिक प्रोग्रामिंग(Programming), मेटा प्रोग्रामिंग(Programming) के बारे में चर्चा कर रहे हैं, जहां हम कुछ कार्य, टेम्पलेटेड फ़ंक्शंस, एक या अधिक प्रकार के चर के साथ पैरामीटर(parameter) किए गए कार्य लिख सकते हैं ताकि उपयोग के आधार पर या तो अलग-अलग पैरामीटर(parameter) प्रकारों के अलग-अलग फ़ंक्शन(funnction) मिल सकें। अधिभार के रूप में उत्पन्न और आह्वान किया जा सकता है। हमने पिछले मॉड्यूल(module) में गहराई देखी है। हमने गहराई से एक अधिकतम फ़ंक्शन(funnction) का एक उदाहरण देखा है, जिसे हमने पहले टेम्प्लेटाइज्ड रूप में लिखा था, इसका उपयोग इंट और डबल के लिए किया था और फिर हमने इसे सी स्ट्रिंग्स के लिए विशेष किया और फिर हमने दिखाया कि यह उपयोगकर्ता के लिए भी जटिल जैसे प्रकारों को परिभाषित करेगा। वर्तमान मॉड्यूल(module) में, हम उस पर जारी रहेंगे और हमारा ध्यान C ++ के अन्य प्रकार के टेम्पलेट(template) होंगे, जिन्हें क्लास टेम्पलेट(template) के रूप में जाना जाता है। यह रूपरेखा है और नीला भाग जो हम चर्चा करते हैं वह आपकी स्क्रीन के बाईं ओर उपलब्ध होगा। यह सिर्फ एक त्वरित पुनरावृत्ति के लिए है, यह हमें देखा जाता है कि एक टेम्पलेट(template) क्या है और हमने इसके भाग को देखा है। और फ़ंक्शन(funnction) टेम्पलेट(template) के संदर्भ में हमने देखा है कि फ़ंक्शन(funnction) टेम्पलेट(template) मूल रूप से एल्गोरिथ्म(algorithm) में कोड(code) पुन: उपयोग होते हैं। तो, आपके पास खोज एल्गोरिथ्म(algorithm) है, हमारे पास सॉर्ट एल्गोरिथ्म(algorithm) है, हमारे पास न्यूनतम एल्गोरिथ्म(algorithm) है, हमारे पास औसत एल्गोरिदम और इतने पर हैं। C ++ में इसके लिए कोड(code) विशेष रूप से तत्व प्रकार के आधार पर लौटाया जाना है। लेकिन, सामान्य तौर पर एल्गोरिथ्म(algorithm) तत्व प्रकारों के आधार पर नहीं बदलता है इसलिए टेम्पलेट(template) का उपयोग करके हम फ़ंक्शन(funnction) टेम्पलेट(template) लिख सकते हैं जो इस फ़ंक्शन(funnction) कोड(code) को सॉर्टिंग, खोज, न्यूनतम, औसत, उन सभी को जेनेरिक रूप में लिख सकते हैं और फिर तुरंत आधारित हो सकते हैं वह प्रकार। अब, हम और अधिक कर सकते हैं यदि हम डेटा(data) संरचना के संदर्भ में कोड(code) के पुन: उपयोग में देखते हैं। उदाहरण के लिए, एक स्टैक(stack) पर विचार करें, पहले आउट में अंतिम। वहाँ कई समस्याएं हैं जो आप उदाहरण के लिए स्टैक(stack) करेंगे, चरम को पीछे करके चरित्र के ढेर की आवश्यकता होगी। पोस्टफ़िक्स में अभिव्यक्ति और infix अभिव्यक्ति को फिर से वर्णों के ढेर की आवश्यकता होती है। उपसर्ग अभिव्यक्तियों के मूल्यांकन के लिए पूर्णांक, दोहरे, जटिल विभिन्न प्रकार के प्रकारों की आवश्यकता हो सकती है जिनका हम मूल्यांकन करना चाहते हैं। एक तीन की गहराई पहले तीन नोड्स के नोड पॉइंटर(pointer) प्रकार के ढेर की आवश्यकता होगी। कई समस्याएं हो सकती हैं, जिन्हें किसी विशिष्ट समस्या समाधान के लिए उपयोग किए जाने वाले विभिन्न प्रकार के ढेर की आवश्यकता होती है। अब, एक विकल्प यह है कि जब भी हमें आवश्यकता हो, इस प्रकार के प्रत्येक के लिए एक स्टैक(stack) क्लास लिखना है, लेकिन हम जो देख रहे हैं, उसमें उदारतापूर्वक एक स्टैक(stack) कोड(code) हो सकता है जिसे उस विशेष प्रकार को तुरंत दिया जा सकता है जिसे हम चाहते हैं, क्योंकि, स्टैक(stack) के रूप में एक अवधारणा पहले एक अंतिम में है, जैसे कि धक्का, पॉप, टॉप, खाली और इतने पर कुछ इंटरफेस के एक सेट के साथ, जो विशिष्ट तत्व प्रकार के आधार पर नहीं बदलता है जो स्टैक(stack) का उपयोग कर रहा है। और यदि आप आगे देखते हैं तो आपको समान समानता मिल जाएगी कतार के साथ कार्य शेड्यूलिंग प्रक्रिया शेड्यूलिंग का उपयोग कतार उपयोगकर्ता को कई समस्याओं की आवश्यकता होती है, जिन्हें स्टैक(stack) कतार को लागू करने जैसी सूची की आवश्यकता होती है, फिर किसी भी प्रकार के ऑब्जेक्ट संग्रह और इतने पर। क्लास टेम्पलेट(template) ऐसे कोड(code) पुन: उपयोग के लिए एक समाधान हैं जहां, हम एक डेटा(data) संरचना के सामान्य भाग की पहचान करते हैं जहां आपके पास समान इंटरफ़ेस और समान या बहुत निकट एल्गोरिदम, समान एल्गोरिदम हैं, लेकिन तत्व प्रकारों के कारण कार्यान्वयन को अलग होना चाहिए उन्हें एक सामान्य सामान्य वर्ग टेम्पलेट(template) के संदर्भ में संयोजित करें। इसलिए, इसे स्पष्ट करने के लिए, यह एक बाएं और दाएं है, यदि आप सिर्फ यहां देखते हैं तो यह चरित्र का एक ढेर है, जो चरित्र है। इन्हें केवल विशेष कोड(code) लाइनों की टिप्पणियों के रूप में दिखाया गया है, जिन्हें टाइप के ज्ञान की आवश्यकता है और यह पूर्णांक का एक स्टैक(stack) है, इसलिए ये वे लाइनें हैं जिनकी आपको आवश्यकता है। तो आप यहाँ पूर्णांक है, यहाँ चार, आप यहाँ चार है, आप यहाँ चार है, और यहाँ int। इसके अलावा बाकी के कोड(code) भी ठीक उसी तरह हैं, जैसे कि हम इसे फ़ंक्शन(funnction) के मामले में किए गए टाइप वेरिएबल द्वारा प्रतिस्थापित नहीं करते हैं। यह वह है जो वर्ग टेम्पलेट(template) को ले जाता है जो कि प्रकार के साथ मानकीकृत होता है और इसमें सदस्यीय कार्य किए जा सकते हैं। बाकी परिभाषा विवरण के लिए है और उदाहरण पर गौर करेंगे। तो स्टैक(stack) के लिए जो हम करते हैं, हम इस प्रकार के तत्व प्रकार को T के रूप में पैरामीटरित करते हैं। जैसा कि आप करते हैं कि आप उन स्थानों को देख सकते हैं जहां आपको आवश्यकता होती है जब आप धक्का देते हैं तो मुझे उस तत्व प्रकार को जानना होगा जो T है जब मैं शीर्ष करता हूं मुझे तत्व प्रकार जानने की आवश्यकता है, पॉप को इसे जानने की आवश्यकता नहीं है, खाली को यह जानने की आवश्यकता नहीं है। चूंकि यह प्रकार T है, इसलिए मैंने इसे मानकीकृत किया है और ठीक उसी तरह जिस तरह से मैंने फ़ंक्शन(funnction) के मामले में किया था, मैंने खाका वर्ग T के संदर्भ में एक टेम्पलेट(template) यहां कहा है कि यह एक टेम्पलेट(template) चर है। और उस टेम्पलेट(template) चर का उपयोग इन सदस्य कार्यों के संदर्भ में किया जाता है। तो, यह वह है जो इसे एक स्टैक(stack) बनाता है जिसे टेम्पलेट(template) किया जाता है, जो कि किसी भी चीज़ के लिए तुरंत किया जा सकता है। बेशक, इस स्टैक(stack) टेम्पलेट(template) को काम करने के लिए हमें टाइप टी, टाइप वैरिएबल टी की जरूरत होगी ताकि कुछ खास गुणों को संतुष्ट किया जा सके। उदाहरण के लिए, आइटम टाइप T का है और डेटा(data) I टाइप T और डेटा(data) तत्व का है। इसलिए हम देखते हैं कि यहां एक असाइनमेंट संभव है। कॉपी असाइनमेंट ऑपरेटर को इस स्थान पर संभव होना चाहिए, इसके बिना आप किसी विशेष प्रकार के स्टैक(stack) को तुरंत नहीं भेज पाएंगे। अगर हम इसका उपयोग करते हुए इसे देखते हैं, तो यह मानते हुए कि यह सब स्टैक(stack) डॉट एच हेडर में चला जाता है, तो मैं इसे तुरंत ही ठीक उसी तरह से पसंद करता हूं जैसे हम फ़ंक्शन(funnction) को त्वरित कर रहे हैं हम इसे वर्ण के लिए कहते हैं। यह अब मुझे उन पात्रों का ढेर देगा जो मैं इसका उपयोग कर सकता हूं। मैं इस कोड(code) को समझाने में नहीं जाऊंगा हमने इस कोड(code) में कई बार देखा है, हम उस स्टैक(stack) का उपयोग वास्तव में तनाव को उलटने के लिए कर सकते हैं। उसी हेडर के साथ स्टैक(stack) डॉट एच। अब मैं एक अलग आवेदन लिख सकता हूं। तो, यह वही हेडर है जो समान टेम्पलेटाइज़्ड स्टैक(stack) कोड(code) है जो मैं पोस्टफ़िक्स एक्सप्रेशन का मूल्यांकन करने के लिए एक अलग एप्लिकेशन लिख सकता हूं। चूँकि यहाँ अभिव्यक्तियाँ पूर्णांक की हैं, इसलिए मुझे एक स्टैक(stack) की आवश्यकता है, जो पूर्णांक के किस अभिव्यक्ति मान को रखेगा, इसलिए इसे इंटिमेट किया गया है। यदि मैंने सी के साथ किया था, तो मुझे दो अलग-अलग स्टैक(stack) कार्यान्वयन, रिवर्स स्ट्रिंग के लिए चार बेस कार्यान्वयन और इस विशेष पोस्टफ़िक्स मूल्यांकन समस्या के लिए इंट रिवर्स रिवर्स कार्यान्वयन की आवश्यकता होगी, लेकिन मैंने एक ही टेम्प्लेटाइज़्ड स्टैक(stack) परिभाषा और के साथ प्रबंधित किया है बस दो अलग अलग प्रकार के साथ त्वरित। यह क्लास टेम्पलेट(template) की मूल शक्ति है और यह हमें विशेष रूप से और अलग-अलग उपयोगिता वर्गों में डेटा(data) संरचनाओं के संदर्भ में बहुत सामान्यीकरण देता है। अब, स्वाभाविक रूप से जैसा कि मैंने उल्लेख किया है कि जब हम यह तात्कालिकता करते हैं। पहले हमने इसे फंक्शन(function) टेम्प्लेट्स के लिए देखा था अब आप इसे क्लास टेम्पलेट(template) के लिए देख रहे हैं, हमें यह सुनिश्चित करना होगा कि टेम्पलेट(template) में जिस प्रकार के पैरामीटर(parameter) का उपयोग किया जाता है, वे कुछ गुणों को संतुष्ट करेंगे जो कि वे किसी भी प्रकार के हो सकते हैं। हो सकता है कि अन्य पैरामीटरकृत प्रकार भी हों, वे स्वयं टाइप कर सकते हैं, लेकिन यह महत्वपूर्ण है कि वे उन विधियों का समर्थन करें, जो कक्षा के कार्यान्वयन के फ़ंक्शन(funnction) टेम्पलेट(template) के कार्यान्वयन के लिए आवश्यक हैं। इसलिए, जैसे लक्षण हैं, उन्हें निर्माणकर्ता का समर्थन करने की आवश्यकता हो सकती है, उन्हें विभिन्न ऑपरेटरों का समर्थन करने की आवश्यकता होगी और हमने उस के उदाहरणों को देखा। वे मूल प्रकार लक्षण हैं जो दोनों फ़ंक्शन(funnction) टेम्पलेट(template) के साथ-साथ क्लास टेम्पलेट(template) का पालन करने की आवश्यकता होगी। तो, यह वही है जो आपने फंक्शन(function) टेम्पलेट(template) के मामले में देखा था, यह सिर्फ आपके रिकैप के लिए है। क्लास टेम्पलेट(template) के संदर्भ में आमतौर पर तात्कालिकता को स्पष्ट रूप से पूरा करने की आवश्यकता होती है और यह महत्वपूर्ण है कि चूंकि यह एक वर्ग है, इसलिए यह काफी संभव है कि, मैं वास्तव में प्रदान किए बिना वर्ग को आगे की घोषणा के रूप में परिभाषित कर सकता हूं , तो मैं वास्तव में सिर्फ यह लिख सकता हूं जिसे एक अपूर्ण स्टैक(stack) प्रकार कहा जाता है। यह सिर्फ यह कहता है कि यह प्रणाली को बताने के लिए आगे की घोषणा है कि एक वर्ग है जिसे स्टैक(stack) कहा जाता है जिसे टाइप टी द्वारा मानकीकृत किया जाता है, लेकिन यह नहीं कहता है कि क्या तरीके हैं और इसी तरह। तो, उस के साथ। यदि मैं वस्तु को तत्काल करने की कोशिश करता हूं, तो मुझे एक त्रुटि मिलेगी, क्योंकि निश्चित रूप से अगर वस्तु को तत्काल नहीं बनाया जा सकता है जब तक कि मुझे निर्माता, विध्वंसक, अन्य ऑपरेटरों और सदस्यों और इतने पर नहीं पता है। लेकिन मैं अभी भी इस प्रकार के लिए एक पॉइंटर(pointer) को परिभाषित कर सकता हूं; मैं इस प्रकार के संदर्भ को परिभाषित कर सकता हूं। इसलिए मैं एक रिवर्स स्ट्रिंग फ़ंक्शन(funnction) को परिभाषित कर सकता हूं जो इस प्रकार को एक संदर्भ के रूप में लेता है जब मैं वास्तव में नहीं जानता कि क्या है। लेकिन एक बार जब मैं रिवर्स स्ट्रिंग फ़ंक्शन(funnction) के शरीर को लागू करना चाहता हूं जब मैं स्वाभाविक रूप से स्टैक(stack) संचालन का उपयोग करना चाहता हूं तो मुझे यह जानना होगा कि वास्तव में स्टैक(stack) क्या है। तात्कालिकता के संदर्भ में, आप जानते हैं कि आलसी तात्कालिकता एक ऐसी चीज है जो अक्सर बहुत उपयोगी होती है। इसलिए, मैं उसी उल्टे स्ट्रिंग कोड(code) को थोड़े अलग तरीके से दिखा रहा हूं, पहले इस पूरे स्टैक(stack) क्लास को स्टैक(stack) डॉट एच एंटर्स में शामिल किया गया था, इसलिए जैसे कि पूरा विचार वहीं हो रहा था। लेकिन अब मैं इसे यहाँ शामिल कर रहा हूँ अगर कुछ चीजें, उदाहरण के लिए, यहाँ हम हवलदार हैंईए फॉरवर्ड डिक्लेरेशन, इसलिए उस फॉरवर्ड डिक्लेरेशन में मेरे पास रिवर्स स्ट्रिंग फंक्शन(function) का एक सिग्नेचर हो सकता है, जो यहां रखे गए स्ट्रिंग को उल्टा कर देगा और क्योंकि एक संदर्भ के रूप में सभी को यह जानना होगा कि यह एक स्टैक(stack) का उपयोग कर रहा है जो टी द्वारा टेम्पलेट(template) किया गया है टेम्पलेट(template) उदाहरण है इस मामले में चार(char) है। लेकिन यह नहीं पता है कि वह प्रकार क्या है, यह नहीं जानता कि प्रकार कैसे लागू किया जाता है और इसकी परवाह नहीं है क्योंकि यह सिर्फ एक संदर्भ को देख रहा है। अगर मेरे पास यह मुख्य है, तो मैं वास्तव में इस समारोह का आह्वान कर सकता हूं क्योंकि मुझे जो भी जानना है वह उस फ़ंक्शन(funnction) का एक हस्ताक्षर है जिसे शरीर बाद में आ सकता है, इसलिए मैंने जानबूझकर शरीर को बाद के समय में रखा है, बस आप यह दिखाते हैं कि मुख्य शरीर को जानने की जरूरत नहीं है। लेकिन निश्चित रूप से, यह आवश्यक है कि मैं एक संदर्भ पैरामीटर(parameter) के रूप में एक स्टैक(stack) का उदाहरण यहां देता हूं। तो, मुख्य को इस स्टैक(stack) को तुरंत करने की आवश्यकता है। जब आप वास्तव में स्टैक(stack) की परिभाषा को जानने के बिना रिवर्स स्ट्रिंग के हस्ताक्षर को परिभाषित कर सकते हैं, तो आप मुख्य फ़ंक्शन(funnction) नहीं लिख सकते हैं, क्योंकि आप स्टैक(stack) की परिभाषा नहीं जानते हैं। तो स्टैक(stack) की परिभाषा को स्टैक(stack) के तात्कालिकता से पहले होना चाहिए। क्योंकि अब अगर आपके पास एक वस्तु उदाहरण है, तो हमें निर्माण करने में सक्षम होना चाहिए, यह विनाश करने में सक्षम होना चाहिए, यह सभी विभिन्न कार्यों को लागू करने में सक्षम होना चाहिए। तो यह इस तरह का है, मैं सिर्फ इस बात पर प्रकाश डालना चाहता था कि क्लास टेम्पलेट(template) की तात्कालिकता की कुंजी में यह आवश्यक नहीं है कि आपको हमेशा एक साथ सब कुछ तुरंत करना होगा। यदि आप कक्षा के संदर्भ को या अस्थायी वर्ग को इंगित कर रहे हैं, तो आपको कक्षा की पूरी परिभाषा जानने की आवश्यकता नहीं हो सकती है, आप केवल कक्षा की घोषणा को आगे की घोषणा के साथ प्रबंधित कर सकते हैं, जो कहती है कि ये अस्थायी है विभिन्न प्रकार वगैरह क्या हैं। यह बुनियादी वर्ग का टेम्पलेट(template) है। आगे हम कुछ दिखाते हैं, यह आपकी पूर्णता की समझ के लिए है, मुझे गहराई में नहीं जाना चाहिए। यह केवल यह दिखाने के लिए है कि यह फ़ंक्शन(funnction) टेम्पलेट(template) के संदर्भ में जैसा है हमने देखा कि यदि अधिकतम फ़ंक्शन(funnction) में एक प्रकार का पैरामीटर(parameter) टी था और चार सितारा के लिए हम एक अलग व्यवहार चाहते थे, तो वह विशेषीकृत था और टी को बदलकर सिर्फ चार स्टार लगाए और एक डाल दिया दूसरा वाला; उसके लिए फंक्शन(function) की परिभाषा। यह कक्षा के लिए भी संभव है और मैं दिखाता हूं कि यह वास्तव में संभव है कि अगर मेरे पास एक से अधिक पैरामीटर(parameter) हैं तो मैं उन मापदंडों को आंशिक रूप से विशेषज्ञ कर सकता हूं, इसलिए मैं यहां चित्रण करने की कोशिश कर रहा हूं। तो, वहाँ टेम्पलेट(template) है जहाँ छात्र वर्ग यहाँ दो प्रकारों T1 और T2 द्वारा templatized है। T1 एक प्रकार का रोल है, T2 नाम का प्रकार है। इतनी संभावना है कि एक भूमिका हो सकती है एक पूर्णांक हो सकता है यह एक स्ट्रिंग और इतने पर हो सकता है। नाम C ++ में एक स्ट्रिंग प्रकार हो सकता है या यह एक चार सितारा, C स्ट्रिंग प्रकार और इतने पर हो सकता है। ये दो अलग-अलग प्रकार हैं जो हमारे पास हैं। इसलिए, आप जो करते हैं वह मूल रूप से है, मैं हूं कि वहां बहुत अधिक कार्यक्षमता नहीं दी गई है, आप सिर्फ एक निर्माण करते हैं और एक प्रिंट है जिसमें आप इन दो क्षेत्रों को प्रिंट कर सकते हैं, इसलिए केवल चित्रण के लिए। अब, जो दिलचस्प है वह अगले एक है, जहां हम वास्तव में आंशिक रूप से यह विशेषज्ञ हैं? टी 1 और टी 2 दो पैरामीटर(parameter) हैं और मैंने इसे आंशिक रूप से विशेषज्ञता दी है, मेरे पास अभी भी एक टेम्पलेट(template) है जो टी 1 पैरामीटर(parameter) है, लेकिन टी 2 ने स्पष्ट रूप से चार स्टार के रूप में रखा है और फिर मैंने इसका उपयोग किया है। T2 के मामले में, मैं चार सितारा का उपयोग कर रहा हूँ मैंने स्पष्ट रूप से उस चार सितारा को रखा है। तो यह टेम्पलेट(template) का आंशिक इंस्टेंटेशन बन जाता है। इससे पहले छात्र वर्ग के इस टेम्पलेट(template) को T1 और T2 निर्दिष्ट करने के लिए दो प्रकारों की आवश्यकता थी, इसके लिए केवल एक प्रकार निर्दिष्ट करने की आवश्यकता है जो कि T1 है, दूसरा पहले से ही विशिष्ट है। एक टेम्पलेट(template) परिभाषा में, जब आपने सभी प्रकार के मापदंडों के लिए विशेष किया है, तो आप कहते हैं कि टेम्पलेट(template) पूरी तरह से विशेष है अन्यथा आप कहते हैं कि यह आंशिक रूप से विशेष है। अगर हम इसे कुछ वर्ग उदाहरणों के साथ देखते हैं, तो मान लें कि हमने एक ऐसा उदाहरण बनाया है, जैसे कि यह स्वाभाविक रूप से स्ट्रिंग में दोनों को निर्दिष्ट करता है। तो यह इस टेम्पलेट(template) के बारे में बात करने की कोशिश कर रहा है T1 int और T2 स्ट्रिंग हो। आप आउटपुट से आसानी से बना सकते हैं, आपने एस 1 डॉट किया है; S1 इस टेम्पलेट(template) संस्करण के लिए बनाई गई एक वस्तु है और हम S1 डॉट प्रिंट कर रहे हैं जो कि संस्करण एक का उपयोग किया जा रहा है। दूसरे में, हमने क्या उपयोग किया है? दूसरे एक में, हमने कुछ दिलचस्प इस्तेमाल किया था। दूसरे में जो आप कह रहे हैं, उसे ध्यान से देखें, इसमें हमने कुछ को निर्दिष्ट भी किया है जैसे कि टी 1 इंट के बराबर या टी 2 स्ट्रिंग के बराबर। याद रखें कि फ़ंक्शन(funnction) के संदर्भ में हमारे पास फ़ंक्शंस के डिफ़ॉल्ट पैरामीटर(parameter) हो सकते हैं जो मान हैं, हम 5 के साथ आरंभीकृत के बराबर int x लिख सकते हैं, ताकि अगर मैं उस पैरामीटर(parameter) को पास न करूं तो इसे 5 के रूप में लिया जाएगा। इसी तरह, आप डिफ़ॉल्ट हो सकते हैं प्रकार के पैरामीटर। इसलिए यदि मैं इसे निर्दिष्ट नहीं करता हूं तो इसे उस प्रकार लिया जाएगा। अगर मैं सिर्फ स्ट्रिंग छात्र इंट कह रहा हूं, अगर मैं छात्र इंट कहता हूं तो इसका मतलब है कि मैं इसे ले रहा हूं। और मैंने T2 निर्दिष्ट नहीं किया है जो कि स्ट्रिंग होने के लिए डिफ़ॉल्ट रूप से लिया जाता है। तो यह डिफ़ॉल्ट रूप से स्ट्रिंग होने के लिए लिया जाता है। मैं यह कर सकता हूं, जो फिर से इसका मतलब होगा, जहां दोनों ने डिफ़ॉल्ट पैरामीटर(parameter) मान लिया। डिफ़ॉल्ट T1 int है, डिफ़ॉल्ट T2 int है। मैं एक छात्र स्ट्रिंग कर सकता हूं, फिर मैं छात्र स्ट्रिंग करता हूं इसका मतलब है कि मैंने टी 1 स्ट्रिंग करने के लिए किया है और टी 2 एक डिफ़ॉल्ट है जो स्ट्रिंग भी है। आप बस देख सकते हैं कि मैंने वह आउटपुट दिखाया है जो आप उत्पन्न करते हैं। अंत में, अगर मैं कहूं कि हमने यहां क्या किया? हमने कहा कि दूसरा पैरामीटर(parameter) चार सितारा के लिए आंशिक रूप से विशिष्ट है। इसलिए अगर मैं int char star लगाता हूं तो इसका मतलब यह टेम्पलेट(template) नहीं है क्योंकि दूसरा पैरामीटर(parameter) आंशिक रूप से विशेष किया गया है, इसलिए यदि मैं यह कहता हूं तो इसका मतलब यह टेम्पलेट(template) है और आप देख सकते हैं कि हम S5 के लिए प्रिंट कर रहे हैं जब हम S5 डॉट प्रिंट करते हैं तो आप प्रिंट करते हैं देख सकते हैं कि संस्करण दो को मुद्रित किया जा रहा है जो दर्शाता है कि आप आंशिक रूप से विशेष टेम्पलेट(template) संस्करण का उपयोग कर रहे हैं। यह आपको केवल यह दिखाने के लिए है कि इस प्रकार की चीजें आप कई मापदंडों के साथ कर सकते हैं और आंशिक रूप से उन्हें विशेषज्ञ बना सकते हैं क्योंकि आप एक से दूसरे में जाते हैं और आपके पास डिफ़ॉल्ट पैरामीटर(parameter) भी हो सकते हैं। अंत में, इससे पहले कि मैं समाप्त करूं, मैं आपको केवल क्लास इनहेरिटेंस के साथ टेम्पलेट(template) का उपयोग करने का एक उदाहरण दिखाता हूं, इसलिए यह केवल एक बाउंड सेट प्रकार की डेटा(data) संरचना बनाने का प्रयास है। एक सूची है, सूची के बारे में विशेष रूप से दिलचस्प कुछ भी नहीं है बस एक सूची है जिसमें एक ऐड फ़ंक्शन(funnction) होता है, जिसमें एक लंबाई फ़ंक्शन(funnction) होता है, एक विशेष तत्व को खोजने के लिए एक फ़ंक्शन(funnction) होता है, तत्वों को रखने के लिए आंतरिक रूप से वेक्टर का उपयोग करता है। तो यह एक सहायक डेटा(data) संरचना की तरह है। फिर आप इस सूची का उपयोग करके एक सेट को परिभाषित करते हैं। एक सेट में आइटमों की एक सूची होती है एक वर्ग टी। इसमें एक आभासी फ़ंक्शन(funnction) होता है जो तत्वों को लंबाई जोड़ सकता है। तो मूल रूप से क्या होगा यदि आप एक तत्व जोड़ते हैं तो यह सूची में जाएगा यह आइटम पर जाएगा और एक पुट करेगा। यदि आप चाहते हैं कि आप यहां एक पुट करेंगे, तो मुझे लगता है, क्या मुझे कुछ याद आया? नहीं। यह इसे जोड़ देगा, वास्तव में जोड़ें यदि आप एक सेट में जोड़ना चाहते हैं, तो अब यह एक सेट है, यह दिलचस्प है, यह एक सेट है इसलिए प्रत्येक तत्व को अद्वितीय होना चाहिए, सेट में विशिष्टता है। जिस तरह से मैं यह कर रहा हूं, मैं पहले इस सूची पर मूल्य लेता हूं मुझे पता चलता है कि क्या तत्व इस सूची से संबंधित है यदि यह है तो यह पहले से ही सेट में है इसलिए आप ऐसा कुछ भी नहीं करते हैं जो आप अभी वापस करते हैं। यदि मेरा संबंध नहीं है तो नियंत्रण यहाँ आता है, तो आप इसे सूची में जोड़ते हैं, इसलिए यह वही है। लंबाई सूची की लंबाई पर बस एक रैपर है, पर एक रैपर खोजें। यह आपको किसी भी तत्व प्रकार के लिए सेट होने का एक प्रकार देता है। अब, मान लीजिए कि मैं एक तयशुदा सेट चाहता हूं। यहाँ नाम से बँधा हुआ सेट, जो दो सीमाओं वाला एक सेट है; तत्वों को उस सीमा के भीतर रहना होगा, एक निर्धारित सेट में केवल वही सदस्य हो पाएंगे जो न्यूनतम और अधिकतम मूल्यों के भीतर हैं। तो यह सेट से एक विशेषज्ञता है। यह आप देख सकते हैं कि आप विशेषज्ञता कैसे लिखते हैं। बाउंड सेट को भी टेम्पलेट(template) किया गया है क्योंकि इसमें एक टेम्पलेट(template) पैरामीटर(parameter) है जो एक तत्व प्रकार है, लेकिन यह सेट टी से माहिर है। फिर बाउंड सेट में इसका एक कंस्ट्रक्टर है, इसमें एक ऐड है। और, जब आप जोड़ने का प्रयास करते हैं, तो यह क्या होता है, यह बदलना होगा कि यदि पहले से ही है, तो यह वापस आ जाएगा जो सेट का व्यवहार है। लेकिन, यदि मान न्यूनतम और अधिकतम के भीतर है तो यह मूल सेट क्लास ऑब्जेक्ट पर जाएगा जो बेस क्लास ऑब्जेक्ट है और इसे जोड़ें। लेकिन अगर यह नहीं है, तो यह कुछ भी नहीं करता है, यह बस आपको यहां एक अपवाद के माध्यम से अनदेखा कर सकता है और कुछ अन्य व्यवहार भी कर सकता है। लेकिन जो मैं सिर्फ दिखाने की कोशिश कर रहा हूं वह यहां है, मेरे पास एक बाउंड सेट है जो सेट का एक विशेषज्ञता है, यह टेम्प्लाटाइज़्ड है, यह भी टेम्प्लेटाइज्ड है और इसका एक हिस्सा है क्योंकि एक घटक की एक सूची है जो इसके एक हिस्से के रूप में एक वेक्टर है। इन सभी को टेम्पलेटाइज़ किया जाता है, अंत में मुझे एक बाउंड सेट मिलता है जो इन सभी टेम्प्लाटाइज़्ड क्लासेस का उपयोग करके और इस टेम्पलेटाइज़्ड क्लास पर इनहेरिटेंस का उपयोग करके किसी भी प्रकार का होता है। तो, यह है कि कैसे इनहेरिटेंस सुविधा के साथ टेम्पलेट(template) को मिलाया जा सकता है। यह एक अंतिम बाउंड सेट एप्लिकेशन है जिसे आप केवल एप्लिकेशन को पूरा कर सकते हैं और चेक कर सकते हैं और इसे चला सकते हैं कि आपने इस सेट में कुछ नंबर जोड़े हैं, और फिर आप चार खोजने की कोशिश करते हैं जो आपको मिलने की उम्मीद है। और आप जाँच करें कि क्या आपके पास सूची में 0 या 25 जैसी कोई चीज़ है जो कि नहीं होनी चाहिए क्योंकि आपकी सूची 3 और 21 के बीच है। इसलिए आप कहते हैं कि कोई अप्रत्याशित मूल्य नहीं है। यह सिर्फ उदाहरण के साथ दिखाता है कि आपका बाध्य सेट डेटा(data) प्रकार कैसे काम करेगा। संक्षेप में, हमने C ++ में टेम्पलेट(template) पेश किए हैं और हमने चर्चा की है कि क्लास टेम्पलेट(template) में डेटा(data) संरचना का एक सामान्य समाधान है। फ़ंक्शन(funnction) टेम्पलेट(template) के साथ संयुक्त यह हमें जेनेरिक प्रोग्रामिंग(Programming), मेटा प्रोग्रामिंग(Programming) कोड(code) लिखने में सक्षम होने के मामले में एक प्रमुख लाभ देता है और एक मानक टेम्पलेट(template) लाइब्रेरी या सी ++ के एसटीएल के रूप में जाना जाता है की एक नींव देता है।