এই আর্টিকেলে আমরা C++ STL-এ std::is_standard_layout টেমপ্লেটের কাজ, সিনট্যাক্স এবং উদাহরণ নিয়ে আলোচনা করব।
is_standard_layout হলো একটি টেমপ্লেট যা <type_traits> হেডার ফাইলের অধীনে আসে। এই টেমপ্লেটটি ব্যবহার করা হয় দেওয়া টাইপ T একটি স্ট্যান্ডার্ড লে আউট কিনা তা চেক করার জন্য।
C++-এ স্ট্যান্ডার্ড লে আউট কী?
স্ট্যান্ডার্ড লে আউট টাইপ হলো এমন একটি টাইপ যা সিম্পল লিনিয়ার স্ট্রাকচারirana (যেমন অ্যারেতে দেখা যায়) এবং এক্সেস কন্ট্রোল যা অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজে লেখা প্রোগ্রামের সাথে যোগাযোগ করতে সহজে ব্যবহার করা যায়। এটি এক কোড সব প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য ধারণা নিয়ে লেখা একটি টাইপ।
একটি স্ট্যান্ডার্ড লে আউট ক্লাসের নিচের বৈশিষ্ট্যগুলো থাকে -
- এতে কোনো ভার্চুয়াল ফাংশন বা ভার্চুয়াল ক্লাস থাকা উচিত নয়।
- সব ক্লাসের জন্য একই এক্সেস কন্ট্রোল (পাবলিক, প্রাইভেট, প্রোটেক্টেড) থাকতে হবে।
- কোনো নন-স্ট্যাটিক ডেটা টাইপ থাকা উচিত নয়।
- একই টাইপের বেস ক্লাস থাকা উচিত নয় যেটি এর প্রথম নন-স্ট্যাটিক ডেটা টাইপ।
সিনট্যাক্স
template <class T> is_standard_layout;
প্যারামিটারস
টেমপ্লেটটি শুধুমাত্র টাইপ T এর প্যারামিটার নিতে পারে, এবং চেক করে যে T একটি স্ট্যান্ডার্ড লে আউট টাইপ কিনা।
রিটার্ন ভ্যালু
এটি একটি বুলিয়ান মান রিটার্ন করে, দেওয়া টাইপটি স্ট্যান্ডার্ড লে আউট টাইপ হলে true, এবং না হলে false।
উদাহরণ
Input: is_standard_layout<int>::value; Output: True
Input: class A{ int a; }; class B : public A { int b; }; is_standard_layout<B>::value; Output: False
উদাহরণ
#include <iostream>
#include <type_traits>
using namespace std;
class TP {
int var;
};
struct TP_2 {
int var;
private:
int var_2;
};
union TP_3 { };
int main() {
cout << boolalpha;
cout << "checking for is_standard_layout template for class : " << is_standard_layout<TP>::value;
cout << "\nchecking for is_standard_layout template for structure: " << is_standard_layout<TP_2>::value;
cout << "\nchecking for is_standard_layout template for union : " << is_standard_layout<TP_3>::value;
cout << "\nchecking for is_standard_layout template for char : " << is_standard_layout<char>::value;
cout << "\nchecking for is_standard_layout template for int : " << is_standard_layout<int>::value;
return 0;
}
আউটপুট
checking for is_standard_layout template for class : true checking for is_standard_layout template for structure: false checking for is_standard_layout template for union : true checking for is_standard_layout template for char : true checking for is_standard_layout template for int : true
উদাহরণ
#include <iostream>
#include <type_traits>
using namespace std;
class TP {
int var;
};
class TP_2 {
int var;
private:
int var_2;
};
class TP_3 { };
int main() {
cout << boolalpha;
cout << "checking for is_standard_layout template for class with one variable : " << is_standard_layout<TP>::value;
cout << "\nchecking for is_standard_layout template for class with one private variable: " << is_standard_layout<TP_2>::value;
cout << "\nchecking for is_standard_layout template for class with no variable : " << is_standard_layout<TP_3>::value;
cout << "\nchecking for is_standard_layout template for int * : " << is_standard_layout<int*>::value;
cout << "\nchecking for is_standard_layout template for float : " << is_standard_layout<float>::value;
return 0;
}
আউটপুট
checking for is_standard_layout template for class with one variable : true checking for is_standard_layout template for class with one private variable: true checking for is_standard_layout template for class with no variable : true checking for is_standard_layout template for int * : true checking for is_standard_layout template for float : true