DLL에서 템플릿 변수를 __declspec (dllexport)를해야합니다 나는과 같이 내가 (null로) 멤버 변수를 초기화해야하는 템플릿 클래스를 가지고
template <typename T>
T * Singleton<T>::m_pInstance = NULL;
내가에이를 넣어 클래스 선언의 끝 (헤더 파일에 있음). 이 올바른 위치를 cpp 파일에 있지만 클래스가 작고 인라인 함수 만 포함되어 있습니다.
이것은 헤더 파일이 솔루션의 일부인 일반 프로그램에서 올바르게 작동합니다. 하지만 이제 클래스에 DLL을 추가하고 DLL에서이를 내 보내려합니다.
DLL에서이 변수를 내보낼 수 있도록이 초기화에 __declspec (dllexport)을 넣을 수있는 곳은 무엇입니까?
내가 읽은 문서는 다음과 같이 올바른 방법이라고 말한다 :
// ENGINEPART_API is defined as __declspec(dllexport)
template <typename T> ENGINEPART_API
T * Singleton<T>::m_pInstance = NULL;
DLL이 잘 구축,하지만 난 내 프로그램에 클래스를 가져하려고 할 때 내가 얻을 :
1>singleton.h(52): error C2720: 'Singleton<T>::m_pInstance' : '__declspec(dllimport)' storage-class specifier illegal on members
업데이트
슈퍼맨 내가 DLL에서 템플릿을 내보낼 수 없습니다 것을 알려줍니다. 음, 해당 템플릿을 사용하는 DLL에서 클래스를 내보낼 수 있으므로 템플릿이 DLL에있는 이유입니다. 이 멤버 변수 (정적)를 초기화하는 방법이 필요합니다.
클래스 선언은 다음과 같다 : 나는 템플릿을 사용하는 DLL에서 클래스를 내보낼 수 있습니다
template <typename T>
class ENGINEPART_API Singleton
{
private:
static T *m_pInstance;
// ... inline functions
};
: 당신은 템플릿을 내보낼 수 없습니다
class ENGINEPART_API blah : public Singleton <blah>
{...};
"템플릿 클래스"가 아니라 "클래스 템플릿"이 있습니다. 그것은 모든 차이를 만듭니다. 템플릿 만 내보낼 수 있으며 클래스 만 사용할 수 있습니다. –