2012-04-05 29 views
13

Nếu bạn có một lớp mẫu với một biến tĩnh, có cách nào để biến biến giống nhau trên tất cả các loại của lớp, thay vì cho mỗi cái?Lớp C++ Mẫu với các thành viên tĩnh - Tương tự cho tất cả các loại của lớp

Lúc này mã của tôi là như thế này:

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

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

Và chính:

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

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

đầu ra này:

T1: 2 
T2: 2 
T3: 1 

Trong trường hợp như hành vi mong muốn là:

T1: 3 
T2: 3 
T3: 3 

Tôi đoán tôi có thể làm điều đó với một số loại int toàn cầu rằng bất kỳ loại gia này lớp và suất này, nhưng điều đó không có vẻ rất hợp lý, hoặc hướng đối tượng

Cảm ơn bạn bất cứ ai có thể giúp tôi thực hiện điều này.

+0

Các lớp này có được khởi tạo trên nhiều luồng không? Tăng/giảm bài đăng không phải là chủ đề an toàn. –

+0

@ ta.speot.is: Không có thao tác nào an toàn chủ đề. Tôi không chắc tại sao điều đó có liên quan ở đây; không có chủ đề nào được đề cập! –

+0

Ồ, vâng, chúng có lẽ sẽ cần phải được sử dụng trên nhiều chủ đề, tôi sẽ phải xem xét điều đó. – jtedit

Trả lời

28

Có tất cả các lớp bắt nguồn từ một lớp cơ sở chung, chỉ có trách nhiệm là chứa thành viên tĩnh.

class MyBaseClass { 
protected: 
    static int numberAlive; 
}; 

template <typename T> 
class TemplateClass : public MyBaseClass { 
public: 
    TemplateClass(){ numberAlive++; } 
    ~TemplateClass(){ numberAlive--; } 
}; 
Các vấn đề liên quan