如果您有一个带有静态变量的模板类,是否有任何方法可以使该变量在该类的所有类型中都相同,而不是对每种类型都相同?

目前,我的代码是这样的:

 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做到这一点,该类的任何类型都可以递增和递减,但这似乎不是很合逻辑或面向对象

谢谢任何可以帮助我实现这一目标的人。

最佳答案

让所有类都从一个公共(public)基类派生,该基类的唯一职责是包含静态成员。

class MyBaseClass {
protected:
    static int numberAlive;
};

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

09-06 09:38