我有一個模板類中,我必須初始化一個成員變量(爲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>
{...};
您沒有「模板類」,而是「類模板」。這完全不同。模板不能導出,只有類可以。 –