2010-08-09 5 views
0

클래스 템플릿에 정적 함수 포인터 멤버를 사용하려면 어떻게해야합니까?클래스 템플릿의 정적 함수 포인터 멤버

나는 Visual Studio에서 C++로 일하고 있어요, 내 코드는 다음과 유사합니다

template<typename T> 
class ClassTemplate 
{ 
public: 
    static T* CallIt() { return ClassTemplate<T>::mFunctionPointer(); } 

private: 
    static T* (*mFunctionPointer)(); 
}; 

내가는 "확인되지 않은 외부 기호"오류가 컴파일

. 나는 클래스 선언의 외부에서 같은 것을 어떻게해야 같아요 :

template<typename T> 
T* (ClassTemplate<T>::*mFunctionPointer)() = NULL; 

을 불행하게도 그때 C2998을 얻을, "템플릿을 정의 할 수 없습니다."

아이디어가 있으십니까?

+0

이것은 컴파일러 오류를 해결하지는 않지만 템플릿 + 헤더가 너무 잘 섞이지 않는다는 것을 기억하십시오. 템플릿을 사용하는 모든 번역 단위에 구현을 포함시켜야합니다. –

+0

감사합니다. Merlyn,하지만 헤더에 모든 내용이 있습니다. –

답변

3

변경 *의 위치는 그래서

template<typename T> 
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL; 

이 그렇지 않으면 당신은 클래스 ClassTemplate의 포인터 - 투 - 회원으로 mFunctionPointer 변수 네임 스페이스 수준을 정의하기 위해 노력하고 있다고.

1

이 당신의 정의를 변환 :

template<typename T> 
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL; 

* 표시는 (클래스 범위 해상도 포함) 식별자 앞에 나타납니다.

관련 문제