এই আর্টিকেলে আমরা C++ STL-এ std::is_reference টেমপ্লেটের কাজ, সিনট্যাক্স এবং উদাহরণ নিয়ে আলোচনা করব।
is_reference হলো একটি টেমপ্লেট যা <type_traits> হেডার ফাইলের অধীনে আসে। এই টেমপ্লেটটি ব্যবহার করা হয় দেওয়া টাইপ T একটি রেফারেন্স টাইপ কিনা তা চেক করার জন্য।
এই টেমপ্লেটটি is_rvalue এবং is_lvalue-এর সংমিশ্রণ এবং চেক করে যে উভয়ের যেকোনো একটি সত্য হলে is_reference-র ফলাফলও সত্য হবে।
C++-এ রেফারেন্স কী?
একটি রেফারেন্স হলো ইতিমধ্যে বিদ্যমান একটি ভেরিয়েবলের উপনাম বা অন্য একটি নাম। একটি রেফারেন্স পয়েন্টারের থেকে আলাদা -
- রেফারেন্স কখনও null সেট করা যাবে না কিন্তু পয়েন্টার হতে পারে null পয়েন্টার।
- একবার একটি রেফারেন্স কোনো অবজেক্টের সাথে ইনিশিয়ালাইজ হলে সেটি পরিবর্তন করা যায় না। পয়েন্টার যেকোনো সময় অন্য অবজেক্টের দিকে নির্দেশ করতে পারে।
- একটি রেফারেন্স তৈরি হওয়ার সাথে সাথে ইনিশিয়ালাইজ করা উচিত, যেখানে পয়েন্টার তৈরি হওয়ার পরেও ইনিশিয়ালাইজ করা যায়।
একটি রেফারেন্স অ্যাম্পারস্যান্ড (&) সিম্বল ব্যবহার করে ডিক্লেয়ার করা হয়, যেটি আমরা রেফার করতে চাই সেটির আগে।
সিনট্যাক্স
template <class T> is_reference;
প্যারামিটারস
টেমপ্লেটটি শুধুমাত্র একটি প্যারামিটার টাইপ T নিতে পারে, এবং চেক করে যে দেওয়া টাইপটি রেফারেন্স টাইপ কিনা।
রিটার্ন ভ্যালু
এটি একটি বুলিয়ান মান রিটার্ন করে, দেওয়া টাইপটি রেফারেন্স টাইপ হলে true, এবং রেফারেন্স টাইপ না হলে false।
উদাহরণ
Input: is_reference<int>::value; Output: False Input: is_reference<int&>::value; Output: True
উদাহরণ
#include <iostream>
#include <type_traits>
using namespace std;
class TP { };
int main() {
cout << boolalpha;
cout << "Checking for is_reference: ";
cout << "\n class TP : " << is_reference<TP>::value;
cout << "\n class TP&: " << is_polymorphic<TP&>::value;
cout << "\n class TP&&: " << is_polymorphic<TP&&>::value;
return 0;
}
আউটপুট
Checking for is_reference: class TP : false class TP&: false class TP&&: false
উদাহরণ
#include <iostream>
#include <type_traits>
using namespace std;
int main() {
cout << boolalpha;
cout << "Checking for is_reference: ";
cout << "\n int: " << is_reference<int>::value;
cout << "\n int&: " << is_reference<int&>::value;
cout << "\n int&&: " << is_reference<int&&>::value;
// char
cout << "\n char: " << is_reference<char>::value;
cout << "\n char&: " << is_reference<char&>::value;
cout << "\n char&&: " << is_reference<char&&>::value;
// float
cout << "\n float: " << is_reference<float>::value;
cout << "\n float&: " << is_reference<float&>::value;
cout << "\n float&&: " << is_reference<float&&>::value;
// double
cout << "\n double: " << is_reference<double>::value;
cout << "\n double&: " << is_reference<double&>::value;
cout << "\n double&&: " << is_reference<double&&>::value;
return 0;
}
আউটপুট
Checking for is_reference: int: false int&: true int&&: true char: false char&: true char&&: true float: false float&: true float&&: true double: false double&: true double&&: true