2012-04-05 9 views
13

के लिए समान है यदि आपके पास स्थैतिक चर के साथ टेम्पलेट क्लास है, तो वैरिएबल को क्लास के सभी प्रकारों में समान होने के लिए कोई तरीका है प्रत्येक?स्टेटिक सदस्यों के साथ सी ++ टेम्पलेट क्लास - सभी प्रकार के वर्ग

template <typename T> class templateClass{ 
public: 
    static int numberAlive; 
    templateClass(){ this->numberAlive++; } 
    ~templateClass(){ this->numberAlive--; } 
}; 

template <typename T> int templateClass<T>::numberAlive = 0; 

और मुख्य:

templateClass<int> t1; 
templateClass<int> t2; 
templateClass<bool> t3; 

cout << "T1: " << t1.numberAlive << endl; 
cout << "T2: " << t2.numberAlive << endl; 
cout << "T3: " << t3.numberAlive << endl; 

यह आउटपुट:

T1: 2 
T2: 2 
T3: 1 

के रूप में कहाँ वांछित व्यवहार है:

फिलहाल मेरे कोड इस तरह है

T1: 3 
T2: 3 
T3: 3 

मुझे लगता है मैं वैश्विक पूर्णांक के कुछ प्रकार के साथ यह कर सकता है कि इस वर्ग के वेतन वृद्धि और decrements, लेकिन यह does not किसी भी प्रकार के बहुत ही तार्किक लगता है, या वस्तु उन्मुख

आप किसी को जो मुझे इस को लागू करने में मदद कर सकते हैं धन्यवाद।

+0

क्या ये कक्षाएं एकाधिक धागे पर तत्काल हो जाएंगी? पोस्ट वृद्धि/कमी धागा सुरक्षित नहीं है। –

+0

@ ta.speot.is: कोई ऑपरेशन मूल रूप से थ्रेड-सुरक्षित नहीं है। मुझे यकीन नहीं है कि यह यहां क्यों प्रासंगिक है; कोई भी धागे का उल्लेख नहीं किया! –

+0

ओह, हाँ, इन्हें शायद कई धागे पर इस्तेमाल करने की आवश्यकता होगी, मुझे इसे देखना होगा। – jtedit

उत्तर

28

क्या सभी वर्ग एक सामान्य आधार वर्ग से प्राप्त होते हैं, जिनकी एकमात्र जिम्मेदारी स्थिर सदस्य को शामिल करना है।

class MyBaseClass { 
protected: 
    static int numberAlive; 
}; 

template <typename T> 
class TemplateClass : public MyBaseClass { 
public: 
    TemplateClass(){ numberAlive++; } 
    ~TemplateClass(){ numberAlive--; } 
}; 
संबंधित मुद्दे