মূল ধারণাটি স্পষ্ট করার জন্য, আসুন এটি আরও বেসিক উদাহরণে কমিয়ে দিন। যদিও std::tieআরও মানগুলি ফাংশন (একটি টিপল) ফিরিয়ে দেওয়ার জন্য দরকারী তবে আমরা এটি কেবলমাত্র একটি মান দিয়ে সূক্ষ্মভাবে বুঝতে পারি:
int a;
std::tie(a) = std::make_tuple(24);
return a; // 24
এগিয়ে যাওয়ার জন্য আমাদের যে বিষয়গুলি জানতে হবে:
পরবর্তী পদক্ষেপটি হ'ল সেই ফাংশনগুলি থেকে মুক্তি পাওয়া যা কেবলমাত্র আপনার পথে আসে, তাই আমরা আমাদের কোডটিকে এখানে রূপান্তর করতে পারি:
int a;
std::tuple<int&>{a} = std::tuple<int>{24};
return a; // 24
পরবর্তী পদক্ষেপটি হ'ল এই কাঠামোর ভিতরে ঠিক কী ঘটে তা দেখা। এর জন্য, আমি 2 ধরণের Tবিকল্প std::tuple<int>এবং Trবিকল্পের তৈরি করি std::tuple<int&>, আমাদের ক্রিয়াকলাপের জন্য সর্বনিম্নে নামিয়ে রেখেছি :
struct T { // substituent for std::tuple<int>
int x;
};
struct Tr { // substituent for std::tuple<int&>
int& xr;
auto operator=(const T& other)
{
// std::get<I>(*this) = std::get<I>(other);
xr = other.x;
}
};
auto foo()
{
int a;
Tr{a} = T{24};
return a; // 24
}
এবং পরিশেষে, আমি কাঠামোগুলি সমস্ত একসাথে মুছে ফেলতে চাই (ভাল, এটি 100% সমতুল্য নয়, তবে এটি আমাদের কাছে যথেষ্ট, এবং এটির অনুমতি দেওয়ার পক্ষে যথেষ্ট স্পষ্ট):
auto foo()
{
int a;
{ // block substituent for temporary variables
// Tr{a}
int& tr_xr = a;
// T{24}
int t_x = 24;
// = (asignement)
tr_xr = t_x;
}
return a; // 24
}
সুতরাং মূলত, std::tie(a)একটি ডেটা সদস্য রেফারেন্স সূচনা করে a। std::tuple<int>(24)মান সহ একটি ডেটা সদস্য তৈরি করে 24এবং অ্যাসাইনমেন্টটি প্রথম কাঠামোর মধ্যে ডেটা সদস্যের রেফারেন্সকে 24 বরাদ্দ করে। কিন্তু যেহেতু ডেটা সদস্যটি একটি রেফারেন্সের সাথে আবদ্ধ হয় a, এটি মূলত নির্ধারিত 24হয় a।