If you have a template class with a static variable, is there any way to get the variable to be the same across all types of the class, rather than for each one?
At the moment my code is like this:
template <typename T> class templateClass{
public:
static int numberAlive;
templateClass(){ this->numberAlive++; }
~templateClass(){ this->numberAlive--; }
};
template <typename T> int templateClass<T>::numberAlive = 0;
And main:
templateClass<int> t1;
templateClass<int> t2;
templateClass<bool> t3;
cout << "T1: " << t1.numberAlive << endl;
cout << "T2: " << t2.numberAlive << endl;
cout << "T3: " << t3.numberAlive << endl;
This outputs:
T1: 2
T2: 2
T3: 1
Where as the desired behaviour is:
T1: 3
T2: 3
T3: 3
I guess I could do it with some sort of global int that any type of this class increments and decrements, but that doesnt seem very logical, or Object-Oriented
Thank you anyone who can help me implement this.
Have all the classes derive from a common base class, whose only responsibility is to contain the static member.
class MyBaseClass {
protected:
static int numberAlive;
};
template <typename T>
class TemplateClass : public MyBaseClass {
public:
TemplateClass(){ numberAlive++; }
~TemplateClass(){ numberAlive--; }
};