2012-04-05 23 views
13

Si tiene una clase de plantilla con una variable estática, ¿hay alguna manera de hacer que la variable sea la misma en todos los tipos de clase, en lugar de ¿cada uno?Clase de plantilla C++ con miembros estáticos - Lo mismo para todos los tipos de la clase

Por el momento mi código es así:

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

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

y principales:

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

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

Este salidas:

T1: 2 
T2: 2 
T3: 1 

Donde como el comportamiento deseado es:

T1: 3 
T2: 3 
T3: 3 

supongo que podría hacerlo con algún tipo de int global que cualquier tipo de estos incrementos de clase y decrementos, pero eso no parece muy lógico, o orientado a objetos

Gracias a cualquiera que me pueda ayudar a implementar esto.

+0

¿Se crearán instancias de estas clases en varios hilos? Incremento/disminución de publicación no es seguro para subprocesos. –

+0

@ ta.speot.is: ninguna operación es nativamente segura para subprocesos. No estoy seguro de por qué eso es relevante aquí; ¡Nadie mencionó los hilos! –

+0

Oh, sí, estos probablemente necesitarán ser usados ​​en múltiples hilos, tendré que investigar eso. – jtedit

Respuesta

28

Tienen todas las clases derivadas de una clase base común, cuya única responsabilidad es contener el miembro estático.

class MyBaseClass { 
protected: 
    static int numberAlive; 
}; 

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