language: C++ 4.7.2 (gcc-4.7.2)
date: 223 days 3 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<stdio.h>
#include<string>
 
struct Counter
{
  static unsigned int value;
 
  Counter& operator ++ (int) { value ++; return *this; }
};
unsigned int Counter::value = 0;
 
template <class T>
class Singleton
{
public:
   Singleton(const std::string &name){ 
      printf("%s CTOR call #%d\n", name.c_str(), s_counter.value);  
      s_counter++; 
   }   
   virtual ~Singleton(){}
private:
   static Counter s_counter; // I want this to be shared by all classes
};
 
// I can only initialize it like this; sadly
template<class T>  
Counter Singleton<T>::s_counter;
 
class MyClass1 {}; 
class MyClass2 {}; 
class MyClass3 {}; 
class MyClass4 {}; 
 
int main ()
{
// main code (simplified):
Singleton<MyClass1> c1("MyClass1");
Singleton<MyClass2> c2("MyClass2");
Singleton<MyClass3> c3("MyClass3");
Singleton<MyClass4> c4("MyClass4");
}