C বা C++ এ, আমরা একটি ফাংশন থেকে একাধিক মান ফেরত দিতে পারি না। একাধিক মান ফেরত দিতে, আমাদের ফাংশনের সাথে আউটপুট প্যারামিটার প্রদান করতে হবে। এখানে আমরা C++ এ টিপল এবং পেয়ার STL ব্যবহার করে একটি ফাংশন থেকে একাধিক মান ফেরত দেওয়ার আরেকটি পদ্ধতি দেখতে পাব।
Tuple হল একটি বস্তু যা উপাদানগুলির একটি সংগ্রহ ধারণ করতে সক্ষম, যেখানে প্রতিটি উপাদান বিভিন্ন ধরনের হতে পারে।
জোড়া দুটি মানের একটি সেট তৈরি করতে পারে, যা বিভিন্ন ধরনের হতে পারে। জোড়াটি মূলত একটি বিশেষ ধরনের টিপল, যেখানে শুধুমাত্র দুটি মান অনুমোদিত।
আসুন আমরা একটি উদাহরণ দেখি, যেখানে আমরা দেখব কিভাবে টুপল এবং জোড়া কাজ করছে।
উদাহরণ
#include<iostream> #include<tuple> #include<utility> using namespace std; tuple<int, string, char> my_function_tuple(int x, string y) { return make_tuple(x, y, 'A'); // make tuples with the values and return } std::pair<int, string> my_function_pair(int x, string y) { return std::make_pair(x, y); // make pair with the values and return } main() { int a; string b; char c; tie(a, b, c) = my_function_tuple(48, "Hello"); //unpack tuple pair<int, string> my_pair = my_function_pair(89,"World"); //get pair from function cout << "Values in tuple: "; cout << "(" << a << ", " << b << ", " << c << ")" << endl; cout << "Values in Pair: "; cout << "(" << my_pair.first << ", " << my_pair.second << ")" << endl; }
আউটপুট
Values in tuple: (48, Hello, A) Values in Pair: (89, World)
তাহলে উপরের প্রোগ্রামে সমস্যা কি? NULL কে সাধারণত (void*)0 হিসাবে সংজ্ঞায়িত করা হয়। আমরা NULL কে ইন্টিগ্রেল টাইপে রূপান্তর করতে পারি। সুতরাং my_func(NULL) এর ফাংশন কলটি অস্পষ্ট।
যদি আমরা NULL এর জায়গায় nullptr ব্যবহার করি, তাহলে আমরা নিচের মত ফলাফল পাব -
উদাহরণ
#include<iostream> using namespace std; int my_func(int N) { //function with integer type parameter cout << "Calling function my_func(int)"; } int my_func(char* str) { //overloaded function with char* type parameter cout << "calling function my_func(char *)"; } int main() { my_func(nullptr); //it will call my_func(char *), but will generate compiler error }
আউটপুট
calling function my_func(char *)
যেখানে NULL প্রত্যাশিত সব জায়গায় আমরা nullptr ব্যবহার করতে পারি। NULL-এর মতো, nullptr-কেও যেকোনো পয়েন্টার টাইপে রূপান্তর করা যায়। কিন্তু এটি NULL-এর মতো অখণ্ড টাইপের মধ্যে অন্তর্নিহিতভাবে রূপান্তরযোগ্য নয়।