विभिन्न Enable_if शर्तों का उपयोग करके एक सदस्य फ़ंक्शन का चयन करना
enable_if मेटाफ़ंक्शन का उपयोग टेम्पलेट फ़ंक्शन पैरामीटर निर्दिष्ट करने और उनके आधार पर उपयुक्त सदस्य फ़ंक्शन का चयन करने के लिए किया जाता है . निम्नलिखित कोड पर विचार करें:
template
struct Point
{
// Check if T is int and call MyFunction for int
void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
{
std::cout ::value, float &>::type* = 0)
{
std::cout हालाँकि, यह कोड कंपाइलर त्रुटियों का कारण बन सकता है जो दर्शाता है कि "struct std::enable_if' में 'type' नाम का कोई प्रकार नहीं है"।
Enable_if को समझना
enable_if सुनिश्चित करता है कि ओवरलोड रिज़ॉल्यूशन के दौरान केवल व्यवहार्य फ़ंक्शन ओवरलोड पर विचार किया जाता है। यदि कोई टेम्प्लेट तर्क प्रतिस्थापन विफल हो जाता है, तो उस अधिभार को उम्मीदवार सेट से हटा दिया जाता है।
उपरोक्त उदाहरण में, सदस्य कार्यों को इंस्टेंट करते समय टेम्प्लेट तर्क टी पहले से ही ज्ञात होता है। वांछित व्यवहार को लागू करने के लिए, हम टी के लिए डिफ़ॉल्ट एक डमी टेम्पलेट तर्क बना सकते हैं और इसका उपयोग करके एसएफआईएनएई निष्पादित कर सकते हैं:
template
struct Point
{
template
typename std::enable_if<:is_same int>::value>::type
MyFunction()
{
std::cout
typename std::enable_if<:is_same float>::value>::type
MyFunction()
{
std::cout
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3