我有一个模板类中,我必须初始化一个成员变量(为null)__declspec(dllexport)的一个模板变量,像这样:我需要从一个DLL
template <typename T>
T * Singleton<T>::m_pInstance = NULL;
我把这个在类声明的结尾(在头文件中)。我意识到正确的位置是在cpp文件中,但类很小,只包含内联函数。
这适用于常规程序中头文件是解决方案的一部分。但是现在我想将该类添加到DLL中,并从DLL中导出它。
在哪里可以把__declspec(dllexport)在这个初始化中,以便我可以从DLL中导出这个变量?
我读过的文档说,正确的方法是如下:
// 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中的原因。我需要一种方法来初始化这个成员变量(这是静态的)。
类的声明看起来是这样的:
template <typename T>
class ENGINEPART_API Singleton
{
private:
static T *m_pInstance;
// ... inline functions
};
我可以从使用该模板的DLL导出类:
class ENGINEPART_API blah : public Singleton <blah>
{...};
您没有“模板类”,而是“类模板”。这完全不同。模板不能导出,只有类可以。 –