我有一个模板 Singleton 类,用于我的代码的一定数量的重要组件。使用单例代码模型不是这个问题的重点。
现在,我想为这个类添加一个静态计数器,它由使用这个模板的每个类共享。让我为您编写代码(代码并不详尽):
template <class T>
class Singleton
{
public:
Singleton(const std::string &name){
printf("%s CTOR call #%d\n", name.c_str(), _counter);
_counter++;
}
virtual ~Singleton(){}
private:
static int _counter; // I want this to be shared by all classes
}
// I can only initialize it like this; sadly
template<class T>
int Singleton<T>::_counter = 0;
// main code (simplified):
Singleton<MyClass1>("MyClass1") c1;
Singleton<MyClass2>("MyClass2") c2;
Singleton<MyClass3>("MyClass3") c3;
Singleton<MyClass4>("MyClass4") c4;
预期输出:
MyClass1 CTOR call #0
MyClass2 CTOR call #1 // counter is incremented
MyClass3 CTOR call #2
MyClass4 CTOR call #3
我得到的是:
MyClass1 CTOR call #0
MyClass2 CTOR call #0 // counter is not incremented
MyClass3 CTOR call #0
MyClass4 CTOR call #0
这意味着静态 int 不是共享的,而是特定于每个类的。
如何在我的模板类中有一个“非模板”计数器?仅使用标题模板可以做到这一点吗?