"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > टेम्पलेट तर्कों के आधार पर सदस्य कार्यों का चयन करने के लिए Enable_if का उपयोग कैसे करें?

टेम्पलेट तर्कों के आधार पर सदस्य कार्यों का चयन करने के लिए Enable_if का उपयोग कैसे करें?

2024-11-11 को प्रकाशित
ब्राउज़ करें:902

How to Use enable_if to Select Member Functions Based on Template Arguments?

विभिन्न 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