SFINAE की उपयोगिता को समझना
प्रतिस्थापन विफलता एक त्रुटि नहीं है (SFINAE) टेम्पलेट मेटा-प्रोग्रामिंग में एक आवश्यक अवधारणा है। हालांकि इसके सैद्धांतिक निहितार्थ महत्वपूर्ण हैं, इसके व्यावहारिक अनुप्रयोगों को समझना आपकी कोडिंग क्षमताओं को बढ़ा सकता है।
सशर्त जांच के लिए SFINAE का उपयोग करना
SFINAE का एक उल्लेखनीय उपयोग बूलियन स्थितियों की जांच करना है . स्पष्ट यदि कथनों पर भरोसा करने के बजाय, SFINAE आपको टेम्पलेट विशेषज्ञता को परिभाषित करने की अनुमति देता है जो किसी स्थिति की सत्यता के आधार पर विभिन्न प्रकारों का मूल्यांकन करता है।
निम्नलिखित कोड पर विचार करें:
template void div(char(*)[I % 2 == 0] = 0) { /* this is taken when I is even */ }
template void div(char(*)[I % 2 == 1] = 0) { /* this is taken when I is odd */ }
यह कोड दो टेम्पलेट विशेषज्ञताओं को परिभाषित करता है div() फ़ंक्शन। जब I सम होता है, तो सत्य के साथ I % 2 == 0 के सफल प्रतिस्थापन के कारण पहली विशेषज्ञता का चयन किया जाता है। इसके विपरीत, जब I विषम होता है, तो दूसरी विशेषज्ञता चुनी जाती है।
सूची आकार सीमाओं की जांच करना
SFINAE इनिशियलाइज़र सूचियों के आकार की जांच करने का एक सुविधाजनक तरीका भी प्रदान करता है। यहाँ एक उदाहरण है:
template
struct Vector {
template
Vector(MyInitList const& i, char(*)[M वेक्टर संरचना सुनिश्चित करती है कि इनिशियलाइज़र सूची में अधिकतम एन तत्व शामिल हैं। SFINAE का उपयोग करके, M > N के अमान्य मामले के लिए टेम्प्लेट विशेषज्ञता समाप्त हो जाती है, जिसके परिणामस्वरूप शर्त पूरी होने पर ही वैध प्रकार बनता है।
निष्कर्ष
SFINAE एक बहुमुखी तकनीक है जो प्रोग्रामर को टाइप-स्तरीय गणना करने और सशर्त कोड निर्णय लेने की क्षमता प्रदान करती है। इसके अनुप्रयोग, बूलियन स्थितियों की जांच करने से लेकर इनिशियलाइज़र सूचियों की वैधता सुनिश्चित करने तक, उन्नत सी प्रोग्रामिंग में इसकी उपयोगिता प्रदर्शित करते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3