মডিউল পাঠ (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");
}
};নিজে চেষ্টা করে দেখুন
বক্স নামের একটি ক্লাস টেমপ্লেট ঘোষণা করুন যাতে একটি প্রাইভেট মেম্বার নামক ভ্যালু টাইপ T, একটি কনস্ট্রাক্টর যা এটি শুরু করে এবং একটি পাবলিক মেথড getValue() কনস্ট যা মান প্রদান করে।
ইঙ্গিত দেখান
মনে রাখবেন `বক্স` ক্লাস ডিক্লেয়ারেশনে `টেমপ্লেট <টাইপনাম T>` আগে লিখতে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
একটি ক্লাস টেমপ্লেট Wrapper<T> ঘোষণা করুন T টাইপের একটি পাবলিক সদস্য ডেটা, একটি কনস্ট্রাক্টর র্যাপার(T d), এবং একটি print() পদ্ধতি যা std::cout-এ ডেটা প্রিন্ট করে। এরপরে, Wrapper<char>-এর জন্য একটি সম্পূর্ণ বিশেষীকরণ তৈরি করুন যেখানে print() পদ্ধতিটি একক উদ্ধৃতিতে আবদ্ধ অক্ষরটি প্রিন্ট করে (যেমন, A এর পরিবর্তে 'A')।
ইঙ্গিত দেখান
`রেপার<char>` এর মোট বিশেষত্ব নির্দেশ করতে `টেমপ্লেট <>` ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ