2012-04-05 12 views
13

Se si dispone di una classe template con una variabile statica, esiste un modo per ottenere che la variabile sia uguale per tutti i tipi della classe, anziché per ognuno?Classe template C++ con membri statici - Uguale a tutti i tipi della classe

Al momento il mio codice è simile a questo:

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

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

e principali:

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

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

Questo uscite:

T1: 2 
T2: 2 
T3: 1 

Dove come il comportamento desiderato è:

T1: 3 
T2: 3 
T3: 3 

Credo che avrei potuto farlo con una sorta di int globale che qualsiasi tipo di questi incrementi di classe e decrementi, ma quello non sembra molto logico, o orientata agli oggetti

Grazie qualcuno che può aiutarmi a implementare questo.

+0

Queste classi verranno istanziate su più thread? Post incremento/decremento non è thread-safe. –

+0

@ ta.speot.is: Nessuna operazione è nativamente protetta da thread. Non sono sicuro del perché sia ​​rilevante qui; nessuno ha menzionato le discussioni! –

+0

Oh, sì, questi probabilmente dovranno essere usati su più thread, dovrò esaminarlo. – jtedit

risposta

28

Tutte le classi derivano da una classe base comune, la cui unica responsabilità è quella di contenere il membro statico.

class MyBaseClass { 
protected: 
    static int numberAlive; 
}; 

template <typename T> 
class TemplateClass : public MyBaseClass { 
public: 
    TemplateClass(){ numberAlive++; } 
    ~TemplateClass(){ numberAlive--; } 
}; 
Problemi correlati