this question पढ़ने के दौरान, मैं @Johannes के उत्तर में आया।तर्क के लिए अलग-अलग टेम्पलेट सिंटैक्स एक वर्ग है या नहीं
template<typename> struct void_ { typedef void type; };
template<typename T, typename = void> // Line 1
struct is_class { static bool const value = false; };
template<typename T>
struct is_class<T, typename void_<int T::*>::type> { // Line 2
static bool const value = true;
};
यह निर्माण पाता है कि given type is a class or not है। इस छोटे मेटा कार्यक्रम को लिखने के लिए मुझे किस तरह का वाक्यविन्यास है। क्या कोई विस्तार से समझा सकता है:
- हमें लाइन 1 की आवश्यकता क्यों है?
- लाइन 2 में
<int T::*>
template
पैरामीटर के रूप में वाक्यविन्यास का अर्थ क्या है?
क्यों है 'struct is_class <टी, टाइपनाम void_ :: प्रकार>' (सरल 'संरचना is_class 'के बजाय) की आवश्यकता है? (दूसरा संकलन लेकिन वांछित परिणाम नहीं देता है) –
AProgrammer
@AProgrammer: यदि आप कक्षा के प्रकार को नहीं जानते हैं तो दूसरा संकलन कैसे होता है?आप डिफ़ॉल्ट कैसे चुनेंगे, जो इस मामले में 'typename = void' है? – Xeo
'is_class' (यानी 'typename = void') के पहले संस्करण में' void _ :: type' और डिफ़ॉल्ट पैरामीटर क्यों होना चाहिए? – iammilind