2011-04-11 63 views
2

我有一個模板函數,我在DLL中的頭文件中定義。我不需要導出函數,因爲所有的使用者都會在頭文件中讀取,並且無論如何都具有整個函數。但是,我有一個專門的模板,不能在頭文件中定義(否則我會得到重定義鏈接器錯誤),所以它必須在源文件中。從DLL導出專門的模板函數

導出此函數的正常方法是什麼?

template <typename T> 
bool functionName(/*params*/){ 
//..... 
} 

template<> IMPORTEXPORTMACRO 
bool functionName(/*params*/); 

和源文件有

template<> 
bool functionName(/*params*/){ 
//... 

IMPORTEXPORTMACRO是這些宏要麼是__declspec(dllimport)dllexport

感謝

+3

難道你不能只使內聯的專門功能?從而避免標題錯誤。 – GWW 2011-04-11 18:47:49

+0

然後我從多次定義的函數中得到錯誤。 – bdwain 2011-04-11 18:53:09

+0

你可以簡單地顯示你的代碼(你不需要顯示整個實現或任何東西)。當我說內聯你指定'inline'的權利? – GWW 2011-04-11 19:03:50

回答

0

模板事情確實發生持有者之一。在你使用它之前,編譯器不會用真實(函數/類)的東西代替它。你不能把它放在dll中。唯一的方法是在頭文件中提供它。如果你想隱藏實現,考慮使用類層次結構(運行時多態)