17

静的変数を持つテンプレートクラスがある場合、クラスごとではなく、クラスのすべてのタイプで変数を同じにする方法はありますか?

現時点では、私のコードは次のようになっています。

 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でそれを行うことができると思いますが、それはあまり論理的またはオブジェクト指向ではないようです

私がこれを実装するのを手伝ってくれる人に感謝します。

4

1 に答える 1

35

すべてのクラスを共通の基本クラスから派生させます。その唯一の責任は静的メンバーを含めることです。

class MyBaseClass {
protected:
    static int numberAlive;
};

template <typename T>
class TemplateClass : public MyBaseClass {
public:
    TemplateClass(){ numberAlive++; }
   ~TemplateClass(){ numberAlive--; }
};
于 2012-04-05T22:18:18.930 に答える