【问题标题】:C++ Template Class with Static Members - Same for all types of the class具有静态成员的 C++ 模板类 - 类的所有类型都相同
【发布时间】:2012-04-19 16:12:15
【问题描述】:

如果您有一个带有静态变量的模板类,有没有办法让该变量在该类的所有类型中都相同,而不是每种类型?

目前我的代码是这样的:

 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 来实现,该类的任何类型都会递增和递减,但这似乎不太合乎逻辑或面向对象

感谢任何可以帮助我实现这一点的人。

【问题讨论】:

  • 这些类会在多个线程上实例化吗?后递增/递减不是线程安全的。
  • @ta.speot.is:没有操作本身是线程安全的。我不确定为什么这在这里相关;没有人提到线程!
  • 哦,是的,这些可能需要在多个线程上使用,我得研究一下。
  • 突然间……情节变厚了。
  • @OliCharlesworth 因为你下面的评论。

标签: c++ class templates variables static


【解决方案1】:

让所有类都派生自一个公共基类,其唯一职责是包含静态成员。

class MyBaseClass {
protected:
    static int numberAlive;
};

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

【讨论】:

    最近更新 更多