코드의 중요한 구성 요소 중 특정 구성 요소에 사용하는 템플릿 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
내가 얻을 것은 : 정적 INT를 의미
는MyClass1 CTOR call #0
MyClass2 CTOR call #0 // counter is not incremented
MyClass3 CTOR call #0
MyClass4 CTOR call #0
아니다 공유되지만, 각 클래스에 고유합니다.
템플릿 클래스에 "not-templated"카운터가있을 수 있습니까? 머리말 전용 템플릿으로 가능합니까?
이것은 같은 것입니다. –
그래, 작동하지 않습니다 :) – Gui13
오, sh * t, 나는 당신이 제대로 질문을 읽지 않았다 - 어리석은! – Nim