মূল ধারণাটি স্পষ্ট করার জন্য, আসুন এটি আরও বেসিক উদাহরণে কমিয়ে দিন। যদিও 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
।