मॉड्यूल पाठ (2/2)
कक्षा टेम्पलेट्स
फ़ंक्शंस की तरह, कक्षाओं को भी एक या अधिक डेटा प्रकारों के संबंध में पैरामीटराइज़ किया जा सकता है। यह हमें सामान्य डेटा संरचनाओं (जैसे सूचियां, कतारें, स्टैक या रैपर) को परिभाषित करने की अनुमति देता है जो बिना डुप्लिकेट कोड के किसी भी डेटा प्रकार के साथ काम करते हैं।
क्लास टेम्पलेट को परिभाषित करना
क्लास टेम्पलेट घोषित करने के लिए, हम क्लास परिभाषा से ठीक पहले template <typename T> सिंटैक्स का उपयोग करते हैं। क्लास के अंदर, हम सदस्य चर, रिटर्न प्रकार, या सदस्य फ़ंक्शन पैरामीटर को परिभाषित करने के लिए टाइप पैरामीटर T का उपयोग कर सकते हैं।
template <typename T>
class Box {
private:
T value;
public:
Box(T v) : value(v) {}
T getValue() const {
return value;
}
};प्रारंभ
क्लास टेम्प्लेट का ऑब्जेक्ट बनाते समय, हमें कोण ब्रैकेट के बीच के प्रकार को स्पष्ट रूप से निर्दिष्ट करना होगा <> (हालाँकि C++17 से शुरू होकर, कंपाइलर इसे कुछ संदर्भों में Class Template Argument Deduction या CTAD के माध्यम से निकाल सकता है):
Box<int> intBox(10); // T becomes int
Box<double> doubleBox(3.14); // T becomes doubleटेम्पलेट विशेषज्ञता
कभी-कभी हम किसी क्लास टेम्पलेट के लिए एक अलग व्यवहार चाहते हैं जब इसे एक विशिष्ट प्रकार के साथ इंस्टेंट किया जाता है। इस मामले में, हम template <> सिंटैक्स का उपयोग करके कुल विशेषज्ञता को परिभाषित करते हैं, जिसके बाद लक्ष्य प्रकार को निर्दिष्ट करने वाली वर्ग परिभाषा होती है:
// Total specialization for the bool type
template <>
class Box<bool> {
private:
bool value;
public:
Box(bool v) : value(v) {}
void printState() {
std::cout << (value ? "True" : "False");
}
};खुद कोशिश करना
बॉक्स नामक एक क्लास टेम्प्लेट घोषित करें जिसमें टाइप टी का मान नामक एक निजी सदस्य, एक कंस्ट्रक्टर जो इसे प्रारंभ करता है, और एक सार्वजनिक विधि getValue() कॉन्स्ट जो मान लौटाता है।
संकेत दिखाएँ
`टेम्पलेट <टाइपनाम टी>` को `बॉक्स` वर्ग घोषणा से पहले जोड़ना याद रखें।
3 प्रयासों के बाद समाधान उपलब्ध है
टाइप टी के सार्वजनिक सदस्य डेटा, एक कंस्ट्रक्टर रैपर (टी डी), और एक प्रिंट() विधि के साथ एक क्लास टेम्पलेट रैपर<टी> घोषित करें जो डेटा को std::cout पर प्रिंट करता है। इसके बाद, Wrapper<char> के लिए एक संपूर्ण विशेषज्ञता बनाएं जहां प्रिंट() विधि सिंगल कोट्स में संलग्न कैरेक्टर को प्रिंट करती है (उदाहरण के लिए, A के बजाय 'A')।
संकेत दिखाएँ
`रैपर<char>` की कुल विशेषज्ञता को इंगित करने के लिए `टेम्पलेट <>` का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है