C++ Template Class with Static Members - Same for all types of the class

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.

Answers


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--; }
};

Need Your Help

How to verify if a vector has a value at a certain index

c++ performance random-walk

In a "self-avoiding random walk" situation, I have a 2-dimensional vector with a configuration of step-coordinates. I want to be able to check if a certain site has been occupied, but the problem i...

Paypal token null, One step chekout Magento

magento paypal

Hi I'm building a custom checkout page using the one step checkout methods.