Подтвердить что ты не робот

Класс шаблона С++ со статическими членами - одинаковый для всех типов класса

Если у вас есть шаблонный шаблон со статической переменной, есть ли способ получить переменную одинаково для всех типов класса, а не для каждого из них?

В настоящий момент мой код выглядит так:

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

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

И главное:

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

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

Выводится:

 T1: 2
 T2: 2
 T3: 1

Где в качестве желаемого поведения:

 T1: 3
 T2: 3
 T3: 3

Я предполагаю, что могу сделать это с помощью какого-то глобального int, что любой тип этого класса увеличивает и уменьшает, но это не кажется очень логичным или объектно-ориентированным

Спасибо всем, кто может помочь мне реализовать это.

4b9b3361

Ответ 1

У всех классов есть общий базовый класс, единственная ответственность которого состоит в том, чтобы содержать статический член.

class MyBaseClass {
protected:
    static int numberAlive;
};

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