(দ্রষ্টব্য: tuple
এবং tie
বুস্ট বা সি ++ 11 থেকে নেওয়া যেতে পারে))
কেবলমাত্র দুটি উপাদান দিয়ে ছোট ছোট স্ট্রাক্ট লেখার সময় আমি মাঝে মাঝে একটি বেছে নেওয়ার প্রবণতা করি std::pair
কারণ সমস্ত গুরুত্বপূর্ণ জিনিস ইতিমধ্যে সেই ডেটাটাইপের জন্য করা হয়েছে যেমন operator<
কড়া-দুর্বল-অর্ডার করার জন্য ।
ডাউনসাইডগুলি যদিও বেশ অযথা পরিবর্তনশীল নাম। এমনকি আমি নিজেও এটি তৈরি করে নিলেও typedef
, আমি 2 দিন পরে মনে করব না কী first
এবং আসলে কী second
ছিল, বিশেষত যদি তারা উভয় একই ধরণের হয়। দু'জনের বেশি সদস্যের পক্ষে এটি আরও খারাপ হয়ে ওঠে, যেমন বাসা বেঁধে দেয় pair
much
তার জন্য অন্য বিকল্পটি হ'ল কtuple
, হয় বুস্ট বা সি ++ 11 থেকে, তবে এটি প্রকৃতপক্ষে কোনও সুন্দর এবং পরিষ্কার দেখাচ্ছে না। সুতরাং আমি প্রয়োজনীয় স্ট্রাক্ট লেখার দিকে ফিরে যাই, প্রয়োজনীয় তুলনা অপারেটরগুলি সহ।
যেহেতু বিশেষত এটি operator<
বেশ জটিল হতে পারে, তাই আমি কেবল এইটির জন্য সংজ্ঞায়িত অপারেশনগুলির উপর নির্ভর করে এই পুরো জগাখিচাটি থেকে বিরত থাকার কথা ভেবেছিলাম tuple
:
উদাহরণস্বরূপ operator<
, কঠোর-দুর্বল-আদেশের জন্য:
bool operator<(MyStruct const& lhs, MyStruct const& rhs){
return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
( tie
একটি তোলে tuple
এর T&
পাস আর্গুমেন্ট থেকে রেফারেন্স।)
সম্পাদনা করুন : @ ডেডএমজি থেকে ব্যক্তিগতভাবে উত্তরাধিকার সূত্রে প্রাপ্ত পরামর্শটি tuple
খারাপ কিছু নয়, তবে এটি বেশ কিছুটা ত্রুটি পেয়েছে:
- যদি অপারেটররা মুক্ত-স্থায়ী (সম্ভবত বন্ধুবান্ধব) হয় তবে আমার প্রকাশ্যে উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া দরকার
- কাস্টিংয়ের সাথে, আমার ফাংশন / অপারেটরগুলি (
operator=
বিশেষত) সহজেই বাইপাস করা যায় - সঙ্গে
tie
সমাধান, আমি নির্দিষ্ট সদস্যদের বাইরে চলে যাবে যদি তারা অর্ডার দেওয়ার ব্যাপার না
এই বাস্তবায়নের ক্ষেত্রে কোন ত্রুটি আছে যা আমি বিবেচনা করা দরকার?