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