2013-10-09 2 views
6

मैं कक्षाअलग-अलग तत्कालताओं के साथ स्थिर टेम्पलेट वर्ग चर समान हैं?

template <typename T> 
class MyClass 
{ 
    static int myvar; 
} 

अब निम्न कार्य में क्या होगा है कहो?

MyClass<int>::myvar = 5; 
MyClass<double>::myvar = 6; 

मानक के अनुसार क्या होने जा रहा है? क्या मेरे पास MyClass :: myvar या सिर्फ एक के दो संस्करण होंगे?

+3

सरल उत्तर, दो – john

+1

@ShafikYaghmour मैं कक्षाओं के एक विशाल समूह के लिए मैनुअल लिख रहा हूं, और यह सवाल मुझे हुआ, क्योंकि मेरे पास एक स्थिर कार्य है जो कुछ स्थिर चर सेट करता है, और मैंने सोचा कि यह अच्छा हो सकता है जनता के लिए सवाल शायद यह जानकर कि मानक इसके बारे में क्या कहता है, कोशिश करने से बेहतर है। –

+1

@TheQuantumPhysicist ठीक है, यह समझ में आता है, मुझे मानक से उद्धरण मिला जो कहता है कि प्रत्येक विशेषज्ञता में किसी भी स्थिर सदस्यों की एक प्रति होगी। –

उत्तर

2

चूंकि ओपी ने विशेष रूप से मानक से उद्धरण का अनुरोध किया है, यहां मेरा उत्तर है जिसमें मानक से प्रासंगिक उद्धरण शामिल है।

प्रत्येक विशेषज्ञता यह जो समझ में आता है के बाद से प्रत्येक यह अपनी विशिष्ट वर्ग है myvar की स्वयं की प्रतिलिपि है होगा। सी ++ में खंड 14.7खाका इन्स्टेन्शियशन और विशेषज्ञता पैरा कहते हैं मसौदा मानक (जोर मेरा):

प्रत्येक वर्ग टेम्पलेट विशेषज्ञता एक टेम्पलेट से instantiated किसी भी स्थिर सदस्यों की अपनी एक प्रतिलिपि है।

[ Example: 
template<class T> class X { 
    static T s; 
}; 
template<class T> T X<T>::s = 0; 
X<int> aa; 
X<char*> bb; 

एक्स के पास एक स्थिर सदस्य प्रकार int है और एक्स का स्थिर सदस्य प्रकार char * है। अंत उदाहरण]

7

हां, दो अलग-अलग मानों के साथ दो चर होंगे। लेकिन ऐसा इसलिए है क्योंकि दोनों पूरी तरह से असंबंधित वर्ग हैं। इस तरह टेम्पलेट काम करते हैं। कक्षाओं के रूप में उनके बारे में मत सोचो, बल्कि नियमों के एक सेट के रूप में, जिसके बाद कक्षाएं बनाई गई हैं।

+1

एसटीएल ने एक बार कहा (पैराफ्रेशिंग): "टेम्पलेट्स कुकी कटर हैं। आप कुकी कटर नहीं खा सकते हैं लेकिन आप कुकीज़ बना सकते हैं जिन्हें आप कुकी कटर के साथ खा सकते हैं"। : पी – Simple

1

एक पूरी तरह से 'नया वर्ग' 'प्रत्येक typename' के लिए टेम्पलेट से instantiated है। और चूंकि स्थैतिक सदस्य वर्ग से बंधे हैं, इसलिए इनमें से प्रत्येक वर्ग में स्थैतिक चर की अपनी प्रतियां हैं।

संबंधित मुद्दे