সি ++ ২০-এ সিদ্ধান্ত নেওয়ার জন্য একটি ব্যবস্থা আছে যখন কোনও নির্দিষ্ট সীমাবদ্ধ সত্তা যখন অন্যটির চেয়ে "বেশি বাধা" থাকে। এটি কোনও সাধারণ জিনিস নয়।
এটি তার পারমাণবিক উপাদানগুলির মধ্যে একটি প্রতিবন্ধকতা ভাঙার ধারণা দিয়ে শুরু হয়, একটি প্রক্রিয়া সীমাবদ্ধকরণকে সাধারণীকরণ বলে । এখানে toোকানো বড় এবং জটিল, তবে মূল ধারণাটি হ'ল প্রতিবন্ধকতার প্রতিটি অভিব্যক্তি তার পুনরায় পরমাণু ধারণাগত টুকরো টুকরো টুকরো টুকরো হয়ে যায়, যতক্ষণ না আপনি এমন কোনও উপ-এক্সপ্রেশনটি পৌঁছান যা ধারণা নয়।
সুতরাং দেওয়া হয়েছে, আসুন দেখুন integral
এবং signed_integral
ধারণাটি সংজ্ঞায়িত করা হয় কিভাবে :
template<class T>
concept integral = is_integral_v<T>;
template<class T>
concept signed_integral = integral<T> && is_signed_v<T>;
এর পচানি integral
ঠিক হয় is_integral_v
। পচন signed_integral
হ'ল is_integral_v && is_signed_v
।
এখন, আমরা সীমাবদ্ধ উপশমের ধারণাটিতে আসি । এটি একধরনের জটিল, তবে মূল ধারণাটি হ'ল একটি সীমাবদ্ধতা সি 1 কে একটি প্রতিবন্ধকতা সি 2 "সাবসুম" করতে বলা হয় যদি সি 1 এর পচনশীল প্রতিটি সি 2 এর প্রতিটি উপ-এক্সপ্রেশন থাকে। আমরা দেখি যে করতে integral
অন্তর্ভূত করা নেই signed_integral
, কিন্তু signed_integral
আছে অন্তর্ভূত করা integral
যেহেতু এটা রয়েছে সবকিছু, integral
না।
এর পরে, আমরা সীমাবদ্ধ সংস্থাগুলি অর্ডার করতে এসেছি:
ঘোষণাপত্র ডি 1 কমপক্ষে ঘোষণার ডি 2 হিসাবে সীমাবদ্ধ থাকে যদি * ডি 1 এবং ডি 2 উভয়ই সীমাবদ্ধ ঘোষণা এবং ডি 1 এর সাথে সম্পর্কিত সীমাবদ্ধতা ডি 2 এর সাথে সংযুক্ত থাকে; বা * ডি 2 এর কোনও সম্পর্কিত বাধা নেই।
কারণ signed_integral
subsumes integral
, <signed_integral> wrapper
হিসাবে "সীমাবদ্ধ অন্তত যেমন" হয় <integral> wrapper
। যাইহোক, বিপরীতটি সত্য নয়, সাবমোশনটি বিপরীত হওয়ার কারণে নয়।
সুতরাং, "আরও বাধা" সত্তার নিয়মের সাথে একমত:
একটি ঘোষণাপত্র D1 অন্য ঘোষণার ডি 2 এর চেয়ে বেশি সীমাবদ্ধ থাকে যখন ডি 1 কমপক্ষে ডি 2 হিসাবে সীমাবদ্ধ থাকে এবং ডি 2 কমপক্ষে ডি 1 এর মতো সীমাবদ্ধ থাকে না।
যেহেতু এটি <integral> wrapper
কমপক্ষে ততটা সীমাবদ্ধ নয় <signed_integral> wrapper
, তবে দ্বিতীয়টিকে পূর্বের তুলনায় বেশি সীমাবদ্ধ মনে করা হয়।
এবং সেইজন্য, যখন তাদের দু'জনেই আবেদন করতে পারত, তত বেশি সীমাবদ্ধ ঘোষণার জয় হয়।
সচেতন বাধ্যতা subsumption নিয়ম যে হতে স্টপ একটি অভিব্যক্তি সম্মুখীন হয় যখন যা নয় concept
। সুতরাং আপনি যদি এটি করেন:
template<typename T>
constexpr bool my_is_integral_v = std::is_integral_v<T>;
template<typename T>
concept my_signed_integral = my_is_integral_v<T> && std::is_signed_v<T>;
এই ক্ষেত্রে, গ্রাহ্য my_signed_integral
হবে নাstd::integral
। যদিও এটির জন্য my_is_integral_v
অভিন্নভাবে সংজ্ঞায়িত করা হয়েছে std::is_integral_v
, কারণ এটি কোনও ধারণা নয়, সি ++ এর গ্রাহক বিধিগুলি সেগুলি একই কিনা তা নির্ধারণ করতে এটির মাধ্যমে পিয়ার করতে পারে না।
সুতরাং গ্রাহকতার নিয়মগুলি আপনাকে পারমাণবিক ধারণাগুলির উপর ধারণা তৈরি করতে উত্সাহ দেয়।