Utility (C++)
இது சி + + நிலையான நூலகத்தில் உள்ள ஒரு தலைப்பு கோப்பு ஆகும். இந்த கோப்பில் இரண்டு முக்கிய கூறுகள் உள்ளனஃ, தொடர்புடைய ஆபரேட்டர்களுக்கான இயல்புநிலை நடத்தையை வரையறுக்கும் வார்ப்புருக்களின் தொகுப்பைக் கொண்ட பெயர்வெளி, மற்றும் பயனர் வரையறுக்கப்பட்ட ஆபரேட்டர்களின் அடிப்படையில் அதே வகை பொருள்களுக்கு இடையில் மற்றும். தன்னிச்சையான வகை (கள்) கொண்ட இரண்டு உறுப்பினர் பொருள்களை (மற்றும்) வைத்திருக்கும் ஒரு கொள்கலன் வார்ப்புரு. கூடுதலாக, தலைப்பு இரு வகைகளிலும் பொதுவான இயல்புநிலை ரிலேஷனல் ஆபரேட்டர்களை வரையறுக்கிறது. ரெல் _ ஓப்ஸ் ஜி. சி. சி. யின் செயல்படுத்தல் பெயர்வெளியை (உள்ளமைக்கப்பட்ட) பின்வரும் முறையில் அறிவிக்கிறதுஃ பெயர்வெளி ரெல் _ ஓப்ஸ் {டெம்ப்ளேட் <கிளாஸ் _ டிபி> இன்லைன் பூல் ஆபரேட்டர்! (_ _ x = = _ _ y);} டெம்ப்ளேட் <கிளாஸ் _ Tp> இன்லைன் பூல் ஆபரேட்டர்> (கான்ஸ்ட் _ Tp & _ x, கான்ஸ்ட் _ Tp & _ y) {ரிட்டர்ன் _ y <_ x;} டெம்ப்ளேட் <கிளாஸ் _ Tp> இன்லைன் பூல் ஆபரேட்டர் <= (கான்ஸ்ட் _ Tp & _ x, கான்ஸ்ட் _ Tp & _ y) {ரிட்டர்ன்! (_ _ y <_ _ x);} டெம்ப்ளேட் <கிளாஸ் _ Tp> இன்லைன் பூல் ஆபரேட்டர்> = (கான்ஸ்ட் _ Tp & _ x, கான்ஸ்ட் _ Tp & _ y) {ரீட்டர்ன்! (_ _ x <_ _ y);} இன் பின்வரும் அறிவிப்பைக் கவனியுங்கள், இது சமத்துவத்தையும் அதே வகையின் பிற பொருட்களுடன் ஒப்பிடுவதற்கு குறைவான இயக்கிகளையும் வரையறுக்கிறதுஃ வகுப்பு A {int கட்டிடம்; int அறை; பொதுஃ பூல் ஆபரேட்டர் = = (கான்ஸ்ட் A & பிற) கான்ஸ்ட் {ரிட்டர்ன் (கட்டிடம் = other.building) & & & (அறை = = other.room);} பூல் ஆபரேட்டர் <(கான்ஸ்ட் 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 <பயன்பாடு> பெயர்வெளி std ஐப் பயன்படுத்துகிறதுஃ: ரிலே _ ஆப்ஸ்;// கீழே உள்ள ஆபரேட்டர் ரிலே _ ஆப்ஸ் பூல் ஆபரேட்டர்> = (கான்ஸ்ட் A & a1, கான்ஸ்ட் A & a2) {செய்ய _ ஏதாவது _ வேறு ();// சில தனித்துவமான பக்க விளைவு வருவாயைச் செய்யுங்கள்! (a1 <a2);// ஆனால் இல்லையெனில் அதே செயல்முறையைப் பயன்படுத்தவும்; rel _ ops}; வெற்றிட 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);// உலகளாவிய ஆபரேட்டரைப் பயன்படுத்துகிறது> = மேலே வரையறுக்கப்பட்டுள்ளது} ஒருவர் நிச்சயமாக பின்வருவனவற்றுடன் இணைந்து அறிவிக்க முடியும், இது அனைத்து ரிலேஷனல் ஆபரேட்டர்களின் வழித்தோன்றலையும் அனுமதிக்கிறதுஃ டெம்ப்ளேட் <கிளாஸ் _ Tp> இன்லைன் பூல் ஆபரேட்டர் = = (கான்ஸ்ட் _ Tp & _ x, கான்ஸ்ட் _ Tp & _ y) {ரிட்டர்ன்! (_ _ 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> & _ ஒய்) (__y.first <__x.first) & & __x.second <__y.second);} டெம்ப்ளேட் <கிளாஸ் _ T1, கிளாஸ் _ T2> இன்லைன் பூல் ஆபரேட்டர்! (_ _ x = = _ _ y);} டெம்ப்ளேட் <கிளாஸ் _ T1, கிளாஸ் _ T2> இன்லைன் பூல் ஆபரேட்டர்> (கான்ஸ்ட் ஜோடி <_ T1, _ T2> & _ _ x, கான்ஸ்ட் ஜோடி <_ T1, _ T2> & _ _ y) {ரிட்டர்ன் _ y <_ x;} டெம்ப்ளேட் <கிளாஸ் _ T1, கிளாஸ் _ T2> இன்லைன் பூல் ஆபரேட்டர் <= (கான்ஸ்ட் ஜோடி <_ T1, _ T2 & _ x, கான்ஸ்ட் ஜோடி <_ T1, _ T2 & _ y) (_ _ y <_ _ x);} டெம்ப்ளேட் <கிளாஸ் _ T1, கிளாஸ் _ T2> இன்லைன் பூல் ஆபரேட்டர்> = (கான்ஸ்ட் ஜோடி <_ T1, _ T2> & _ x, கான்ஸ்ட் ஜோடி <_ T1, _ T2> & _ y) {திரும்புக! (_ _ x <_ _ y);} கூடுதலாக தலைப்பில் ஒரு டெம்ப்ளேட்-செயல்பாடு உள்ளது, இது அளவுருக்களின் அடிப்படையில் அதன் ரிட்டர்ன் வகையைக் குறைக்கிறதுஃ// மேலே உள்ள டெம்ப்ளேட் <கிளாஸ் _ T1, கிளாஸ் _ T2> இன்லைன் ஜோடி <_ T1, _ T2> மேக் _ பேர் (_ T1 _ x, _ T2 _ y) {ரிட்டர்ன் ஜோடி <_ T1, _ T2> (_ _ x, _ _ y);} மேலும் காண்க ரிலேஷனல் ஆபரேட்டர் குறிப்புகள் பொது பயன்பாடுகள் நூலகத்திற்கான வெளிப்புற இணைப்புகள் C + + குறிப்பு C + + நிலையான நூலகம்