DLL中使用模板类
模板類是一個(gè)編譯鏈接期間才實(shí)例化的類。只有用到才實(shí)例化。標(biāo)準(zhǔn)沒有支持對(duì)模板類的導(dǎo)出,從另外一種意義上來說,模板類的實(shí)現(xiàn)全部放在頭文件中,也就不需要導(dǎo)出了。但是對(duì)于一些特別情況。模板類中有靜態(tài)變量和函數(shù)。這個(gè)時(shí)候DLL中使用的,以及和其他鏈接這個(gè)DLL的模塊他們是使用的兩份拷貝。
比如, 在DLL中這樣使用:
T * pDLL = Singlton<T>::Get();
然后再鏈接這個(gè)DLL的exe中
T * pEXE = Singlton<T>::Get();
兩處得到的pDLL 和 pEXE 是不一樣的,因?yàn)槟0孱悰]有導(dǎo)出,所以他們使用的是兩份實(shí)例代碼。暫時(shí)還沒有export 一個(gè)模板類的方法。
但是鑒于上述的情況,可以在定義T的DLL中顯示的實(shí)例化模板類 Singlton<T> , 如下實(shí)例化,
template class Singlton<T>;
C++標(biāo)準(zhǔn)規(guī)定:“當(dāng)一個(gè)類模板被顯式實(shí)例化時(shí),它的所有成員函數(shù)都將實(shí)例化。”(When?? a?? class?? template?? is?? explicitly?? instantiated,?? every?? member?? function?? is?? also?? instantiated)
所以現(xiàn)在可以做的就是導(dǎo)出這個(gè)被我們顯式實(shí)例化了的類, 如下語句
template class __declspec(dllexport) Sington<T>;
轉(zhuǎn)載于:https://www.cnblogs.com/JefferyZhou/archive/2012/09/24/2700314.html
總結(jié)
 
                            
                        - 上一篇: 模板函数和模板类
- 下一篇: robot wireless commu
