2010-07-07 2 views
9

저는 어리석은 짓을하고 있습니다 만, 효과가 있으면 좋을 것 같습니다.템플릿 인스턴스화간에 정적 멤버를 공유합니까? (불가능합니까?)

본질적으로 전역이지만 (이상적으로는 클래스 변수로 캡슐화 된) 자체 조회 구조가 필요한 방식으로 유형을 특수화하려고 시도하지만 객체를 유형이 안전하도록 매개 변수화합니다.

따라서, 나는 본질적으로

template<class T, int N> 
class SpecialArray 
{ 
//... 
private: 
    static map<string, internal_t> lookupTable 
} 

을 가지고 내가

template <class T, int N> 
SpecialArray<T,N>::lookupTable; 

을 말할 때이 있다는 것을 LookupTable의 를 초기화 갔던 어떤 이유로, 나는 때까지 생각하지 않았다 SpecialArray의 다양한 인스턴스에 연결된 많은 다른 lookupTable이 실행됩니다.

나는 파이프 꿈일지도 모른다고 생각하며 정답은 별개의 글로벌 싱글 톤 객체로 만 만들지 만 어쨌든 SpecialArray에 대해 하나만 lookupTable이되도록 만들 수 있습니까?

등, (++ 실제 C 아니다) 내 마음에있는 C++, 이것은 갈 것 같은 뭔가

template <class T, int N> 
SpecialArray<*,*>::lookupTable; 

...하지만 슬프게도 GCC 내 마음에서 C++를 컴파일되지 않습니다

거기에 내가 원하는 것을 얻을 수있는 실제 방법이 있습니까 (어딘가에 C + + 0x - 토지 또는 뭔가)? 나는이 룩업 테이블을 조작하는 정적 인 메소드 (타입이나 N을 추적하지 않는다)와 함께이 문제에 부딪 힐 가능성이있다.

... 죄송합니다.

도움이나 동정심을 미리 주셔서 감사합니다.

+0

'internal_t'은 무엇입니까? –

+1

관련 질문 [C++ 정적 템플릿 멤버, 각 템플릿 유형에 대해 하나의 인스턴스?] (http://stackoverflow.com/questions/2220975/c-static-template-member-one-instance-for-each-template-type) –

답변

18

당신은 비 템플릿 기본 클래스를 추가 할 수 있으며, 그 클래스에 lookupTable 이동 :

class Base 
{ 
protected: 
    static map<string, internal_t> lookupTable 
}; 

template<class T, int N> 
class SpecialArray : Base 
{ 
    //... 
}; 
+1

Darn - 나는 그것을 쓰고 있었지만 너무 느렸다. 추가 참고 사항 : 항상 그렇듯이 클래스 내에서 lookupTable 선언은 바로 선언입니다. 클래스 정의 밖에서 클래스의 인스턴스를 정의해야합니다. –

0

소리가 나는 것처럼 들리 겠지만 걱정하지 마세요. 아마도 네임 스페이스를 사용하는 것이 무엇입니까?

관련 문제