इन परिभाषाओं को देखते हुएआप एक निजी सदस्य के प्रकार पर एक टेम्पलेट का विशेषज्ञ कब कर सकते हैं?
template<class T> class foo {};
template<class T> class foo1 { static int i; };
class bar { class baz {}; };
मैं देखना है कि इस संकलित
template<>
class foo<bar::baz> {};
हैरान हूँ लेकिन इस त्रुटि 'class bar::baz' is private
template<>
int foo1<bar::baz>::i = 42;
जब ऐसा होता है के साथ विफल रहता है, और वहाँ है सार्वजनिक प्रकार बनाने के अलावा एक कामकाज?
वह * दिलचस्प है। मुझे लगता है कि यह इस वर्ग के चर को परिभाषित करने में त्रुटि है। आईई, 'foo {};' ठीक है (g ++), लेकिन फिर 'foo f; 'नहीं है। तो यह बहुत अधिक उपयोग करने योग्य प्रकार है, और ऐसा लगता है कि त्रुटि अपेक्षाकृत देर से आती है (यानी, कक्षा परिभाषा पर नहीं)। –
@AmiTavory यह अनुपयोगी नहीं है, क्योंकि आप हमेशा एक [सार्वजनिक प्रकार उपनाम] जोड़ सकते हैं (http://coliru.stacked-crooked.com/a/22807544d8414c4e)। दिलचस्प सवाल, यद्यपि। ':: i' के लिए विशेषज्ञता पर एक एक्सेस चेक क्यों है? –
@DanielFrey मेरी समझ यह है कि प्रश्न 'बार' के कोड को संशोधित किए बिना मामले के बारे में है। –