कल की पोस्ट का जिक्र करते हुए, इस सुबह मुझे जाग गया। यह वास्तव में क्यों काम करता है? जब तक कार्य test
चिंतित है, इस समारोह में कोई शरीर नहीं है, तो यह कुछ भी कैसे कर सकता है? मैं जानना चाहता हूं कि यह क्यों और कैसे काम करता है? मैं वास्तव में आपके उत्तरों को देखने में दिलचस्पी रखता हूं।यह क्यों काम करता है (टेम्पलेट्स, SFINAE)। सी ++
template<typename T>
class IsClassT {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(int C::*); //NO BODY HERE
template<typename C> static Two test(…); //NOR HERE
public:
enum { Yes = sizeof(IsClassT<T>::template test<T>(0)) == sizeof(One) };
enum { No = !Yes };
};
इस बहुत ही रोचक घटना को समझने में सहायता के साथ अग्रिम धन्यवाद।
Standardese के लिए, '3.2/2' और देखो' 3.2/3' (और "का उपयोग" की परिभाषा के "का उपयोग कर परिणामों पर दोनों " कुछ कुछ)। –