Utility (C++)
এটি সি + + স্ট্যান্ডার্ড লাইব্রেরির একটি হেডার ফাইল। এই ফাইলের দুটি মূল উপাদান রয়েছেঃ, একটি নেমস্পেস যা টেমপ্লেটের সেট ধারণ করে যা রিলেশনাল অপারেটরদের জন্য ডিফল্ট আচরণকে সংজ্ঞায়িত করে, এবং ব্যবহারকারী-সংজ্ঞায়িত অপারেটরের উপর ভিত্তি করে একই ধরনের বস্তুর মধ্যে এবং। একটি ধারক টেমপ্লেট যা দুটি সদস্য বস্তু (এবং) নির্বিচারে ধরনের (গুলি) ধারণ করে। উপরন্তু, হেডারটি এস-এর জন্য ডিফল্ট রিলেশনাল অপারেটরকে সংজ্ঞায়িত করে যার উভয় প্রকারের মিল রয়েছে। রিল _ অপস জিসিসি-র বাস্তবায়ন নিম্নলিখিত পদ্ধতিতে নেমস্পেস (নেস্টেড) ঘোষণা করেঃ নেমস্পেস রিল _ অপস {টেমপ্লেট <ক্লাস _ টিপি> ইনলাইন বুল অপারেটর! = (কনস্ট _ টিপি & _ এক্স, কনস্ট _ টিপি & _ _ ওয়াই) {রিটার্ন! (_ _ x = = _ _ y);} টেমপ্লেট <ক্লাস _ টিপি> ইনলাইন বূল অপারেটর> (কনস্ট _ টিপি & _ x, কনস্ট _ টিপি & _ y) {রিটার্ন _ y <_ x;} টেমপ্লেট <ক্লাস _ টিপি> ইনলাইন বূল অপারেটর <= (কনস্ট _ টিপি & _ x, কনস্ট _ টিপি & _ y) {রিটার্ন! (_ _ y <_ _ x);} টেমপ্লেট <ক্লাস _ টিপি> ইনলাইন বুল অপারেটর> = (কনস্ট _ টিপি & _ x, কনস্ট _ টিপি & _ y) {রিটার্ন! (_ _ x <_ _ y);} এর নিম্নলিখিত ঘোষণাটি বিবেচনা করুন, যা একই ধরনের অন্যান্য বস্তুর সাথে তুলনার জন্য সমতা এবং অপারেটরের চেয়ে কম-কে সংজ্ঞায়িত করেঃ শ্রেণী A {int বিল্ডিং; int রুম; সর্বজনীনঃ bool অপারেটর = = (স্থিরাংক A এবং অন্যান্য) স্থিরাংক {রিটার্ন (বিল্ডিং = other.building) & & & (রুম = = other.room);} bool অপারেটর <(স্থিরাংক A এবং অন্যান্য) স্থিরাংক {রিটার্ন (বিল্ডিং <other.building)।। (! (other.building <বিল্ডিং) & & (রুম <other.room));}; অকার্যকর f1 (কনস্ট A & a1, কনস্ট A & a2) {বূল সমান = (a1 = = a2);// ব্যবহার = = শ্রেণী A বূলের মধ্যে সংজ্ঞায়িত সমান নয় = (a1! = a2);// ত্রুটিঃ 'অপারেটরের জন্য কোনও মিল নেই! =' a1! = a2 'বূল কম = (a1 <a2);// ব্যবহার করে <শ্রেণী A বূলের মধ্যে সংজ্ঞায়িত বৃহত্তর = (a1> a2);// ত্রুটিঃ' অপারেটর> 'এর জন্য কোনও মিল নেই' a1> a2 'বূল কম সমান = (a যাইহোক, যদি একটি অনুরূপ প্রকার-নির্দিষ্ট (অর্থাৎ। নন-টেমপ্লেট) অপারেটর বর্তমান পরিসরে বিদ্যমান, এমনকি শ্রেণী সংজ্ঞার বাইরেও, সংকলক পরিবর্তে এটি পছন্দ করবে। //(উপরে থেকে অব্যাহত) #include <ইউটিলিটি> নেমস্পেস ব্যবহার করে স্টডিঃঃ রিল _ অপস;// নীচে অপারেটর সুপারসিডেস রিল _ অপস বুল অপারেটর> = (কনস্ট A & a1, কনস্ট A & a2) {ডু _ কিছু _ অন্যথায় ();// কিছু স্বতন্ত্র পার্শ্বপ্রতিক্রিয়া প্রদান করে! (a1 <a2);// কিন্তু অন্যথায় রিলে _ অপস হিসাবে একই পদ্ধতি ব্যবহার করুন; অকার্যকর f2 (কনস্ট A & a1, কনস্ট A & a2) {বূল সমান = (a1 = = a2);// অপারেটর ব্যবহার করে = = শ্রেণীর মধ্যে সংজ্ঞায়িত A বূল সমান নয় = (a1! = a2);// ব্যবহার করে! (a1 = = a2) প্রতি রিল _ অপস বূল কম = (a1 <a2);// অপারেটর ব্যবহার করে <শ্রেণী A বূল বৃহত্তর = (a1> a2);// ব্যবহার করে (a2 <a1) প্রতি রিল _ অপস বূল কম সমান = (a1 <= a2);// ব্যবহার করে! (a2 <a1) প্রতি রিল _ অপস বূল বৃহত্তর _ সমান = (a1> = a2);// গ্লোবাল অপারেটর ব্যবহার করে> = উপরে সংজ্ঞায়িত} একজন অবশ্যই নিম্নলিখিতগুলির সাথে সামঞ্জস্য রেখে নিম্নলিখিতগুলি ঘোষণা করতে পারে, যা সমস্ত রিলেশনাল অপারেটরদের থেকে উদ্ভূত করার অনুমতি দেয়ঃ টেমপ্লেট <ক্লাস _ টিপি> ইনলাইন বূল অপারেটর = = (কনস্ট _ টিপি & _ এক্স, কনস্ট _ টিপি & _ ওয়াই) {রিটার্ন! (_ _ x <_ _ y।। _ _ y <_ x);} জোড়া একটি ঘোষিত বস্তু, উদাহরণস্বরূপ, যেমন দুটি সদস্য থাকবে, এবং, যোগ তিনটি কনস্ট্রাক্টর ফাংশন। প্রথম (ডিফল্ট) কনস্ট্রাক্টর উভয় সদস্যকে ডিফল্ট মান এবং দিয়ে সূচনা করে, যেখানে দ্বিতীয়টি প্রতিটি প্রকারের একটি প্যারামিটার গ্রহণ করে। তৃতীয়টি হল একটি টেমপ্লেট কপি-কনস্ট্রাকটর যা যে কোনও গ্রহণ করবে, প্রদত্ত প্রকারগুলি এবং যথাক্রমে অন্তর্নিহিত রূপান্তর করতে সক্ষম। জিসিসি-র বাস্তবায়ন প্রক্রিয়াটিকে নিম্নরূপ সংজ্ঞায়িত করে। টেমপ্লেট <ক্লাস _ টি1, ক্লাস _ টি2> স্ট্রাক পেয়ার {টাইপেডেফ _ টি1 ফার্স্ট _ টাইপ; টাইপডেফ _ টি2 সেকেন্ড _ টাইপ; _ টি1 ফার্স্ট; _ টি2 সেকেন্ড; পেয়ার (): ফার্স্ট (), সেকেন্ড () {} পেয়ার (কনস্ট _ টি1 & _ এ, কনস্ট _ টি2 & _ বি): ফার্স্ট (_ এ), সেকেন্ড (_ বি) {} টেমপ্লেট <ক্লাস _ ইউ1, ক্লাস _ ইউ2> পেয়ার (কনস্ট পেয়ার <_ ইউ1, _ ইউ2> & _ পি): ফার্স্ট (__p.first), সেকেন্ড (__p.second) এগুলি উপাদানগুলির উপর ভিত্তি করে প্রকারের বস্তুর জন্য একটি কঠোর দুর্বল ক্রম নির্ধারণ করে এবং তারপরে কেবলমাত্র উপাদানগুলির উপর যখন উপাদানগুলি সমান হয়। //উপরের টেমপ্লেট থেকে অব্যাহত <ক্লাস _ টি1, ক্লাস _ টি2> ইনলাইন বুল অপারেটর = = (কনস্ট পেয়ার <_ টি1, _ টি2> & _ এক্স, কনস্ট পেয়ার <_ টি1, _ টি2> & _ ওয়াই) {রিটার্ন __x.first = = __y.first & & & __x.second = = __y.second;} টেমপ্লেট <ক্লাস _ টি1, ক্লাস _ টি2> ইনলাইন বুল অপারেটর <(কনস্ট পেয়ার <_ টি1, _ টি2> & _ এক্স, কনস্ট পেয়ার <_ টি1, _ টি2> & _ ওয়াই) {রিটার্ন __x.first <__y.first। (! (__y.first <__x.first) & & __x.second <__y.second);} টেমপ্লেট <ক্লাস _ টি1, ক্লাস _ টি2> ইনলাইন বুল অপারেটর! (_ _ x = = _ _ y);} টেমপ্লেট <ক্লাস _ টি1, ক্লাস _ টি2> ইনলাইন বূল অপারেটর> (কনস্ট পেয়ার <_ টি1, _ টি2> & _ _ x, কনস্ট পেয়ার <_ টি1, _ টি2> & _ y) {রিটার্ন _ y <_ x;} টেমপ্লেট <ক্লাস _ টি1, ক্লাস _ টি2> ইনলাইন বূল অপারেটর <= (কনস্ট পেয়ার <_ টি1, _ টি2> & _ x, কনস্ট পেয়ার <_ টি1, _ টি2> & _ ওয়াই) {রিটার্ন! (_ _ y <_ _ x);} টেমপ্লেট <শ্রেণী _ T1, শ্রেণী _ T2> ইনলাইন বূল অপারেটর> = (স্থির জোড়া <_ T1, _ T2> & _ x, স্থির জোড়া <_ T1, _ T2> & _ y) {ফেরত! (_ x <_ y);} উপরন্তু হেডারে একটি টেমপ্লেট-ফাংশন থাকে যা প্যারামিটারগুলির উপর ভিত্তি করে তার রিটার্নের ধরন নির্ধারণ করেঃ// উপরের টেমপ্লেট থেকে অব্যাহত <ক্লাস _ টি1, ক্লাস _ টি2> ইনলাইন পেয়ার <_ টি1, _ টি2> মেক _ পেয়ার (_ টি1 _ এক্স, _ টি2 _ ওয়াই) {রিটার্ন পেয়ার <_ টি1, _ টি2> (_ _ এক্স, _ ওয়াই);} আরও দেখুন রিলেশনাল অপারেটর রেফারেন্স লাইব্রেরি সি + + স্ট্যান্ডার্ড লাইব্রেরির জন্য বাহ্যিক লিঙ্ক সি + + রেফারেন্স