2012-04-05 7 views
13

静的変数を持つテンプレートクラスを使用している場合、変数をすべてのタイプのクラスで同じにする方法はありますかそれぞれ?静的メンバーを含むC++テンプレートクラス - クラスのすべてのタイプに同じ

現時点では私のコードは次のようである:

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 

私は、このクラスの増分と減分のいずれかのタイプが、それdoesntのは非常に論理的に見えるというグローバルなint型のいくつかの並べ替えでそれを行う、またはことができると思いオブジェクト指向

はあなたに私はこれを実装することができます誰にもありがとうございます。

+0

これらのクラスは複数のスレッドでインスタンス化されますか?ポストインクリメント/デクリメントはスレッドセーフではありません。 –

+0

@ ta.speot.is:スレッドセーフでない操作はありません。それがなぜここに関係するのかわからない。誰もスレッドに言及しなかった! –

+0

ああ、ええ、これらはおそらく複数のスレッドで使用する必要があります、私はそれを調べなければなりません。 – jtedit

答えて

28

すべてのクラスは、共通の基本クラスから派生させてください。唯一の責任は静的メンバーを含むことです。

class MyBaseClass { 
protected: 
    static int numberAlive; 
}; 

template <typename T> 
class TemplateClass : public MyBaseClass { 
public: 
    TemplateClass(){ numberAlive++; } 
    ~TemplateClass(){ numberAlive--; } 
}; 
関連する問題