मेटाप्रोग्रामिंग: फ़ंक्शन परिभाषा के लिए वैकल्पिक टेम्पलेट चयन मानदंड
यह प्रश्न किसी प्रकार की परिवर्तित करने की क्षमता के आधार पर टेम्पलेट को परिभाषित करने की अवधारणा की पड़ताल करता है एक स्ट्रिंग के लिए. मूल कोड is_arithmetic प्रकार विशेषता का उपयोग करता है, लेकिन इसके बजाय एक मानदंड का उपयोग करने का सुझाव है जो मूल्यांकन करता है कि क्या to_string को प्रकार के लिए परिभाषित किया गया है।
हालांकि, इस मानदंड के विपरीत, यह निर्धारित करना कि to_string कब परिभाषित नहीं है, साबित होता है चुनौतीपूर्ण. निम्नलिखित कोड विफल रहता है:
templateenable_if_t इसे संबोधित करने के लिए, उत्तर वाल्टर ब्राउन के void_t प्रकार विशेषता का उपयोग करने का प्रस्ताव करता है, जो निम्नलिखित के निर्माण की अनुमति देता है:
template<typename T, typename = void> struct has_to_string : std::false_type { }; template<typename T> struct has_to_string<T, void_t<decltype(std::to_string(std::declval<T>()))> > : std::true_type { };यह प्रकार विशेषता प्रभावी ढंग से मूल्यांकन करती है कि क्या to_string किसी दिए गए प्रकार के लिए परिभाषित है, इस प्रकार एक वैकल्पिक टेम्पलेट चयन मानदंड प्रदान करता है जो मूल इरादे के साथ अधिक सटीक रूप से संरेखित होता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3