2013-03-01 57 views
-1

爲什麼我會使用顯式實例化函數模板,對於一個類型?如果我不使用函數的顯式實例化,那麼該模板用於創建必要的函數,那麼使用顯式的實例化函數的顯式實例化

template <class Any> 
void Swap (Any &, Any &); 
// template prototype 

template <> void Swap<job>(job &, job &); 
// explicit specialization for job 

int main(void) 
{ 

template void Swap<char>(char &, char &); 
// explicit instantiation for char 

short a, b; 
Swap(a,b); 
// implicit template instantiation for short 

job n, m; 
Swap(n, m); 
// use explicit specialization for job 

char g, h; 
Swap(g, h); 
// use explicit template instantiation for char 

} 

在上述例如:顯式實例化是爲char類型完成的。這有什麼用?如果編譯器可以使用該模板爲char類型創建一個fn。

如果有任何refrences,可以幫助我清楚我的概念,請不要包括那些。

+0

致** Mr.Downvoter **,請盡力留下您的失敗理由。因爲你發現它是一個愚蠢的事情,據我所知,當我進行搜索時,這個問題沒有出現(或者因爲我發佈我的問題後標題變得清晰) – 2013-04-26 19:15:57

回答

1

模板的定義必須在實例化它的每個翻譯單元中可用。通常,這是通過在頁眉中定義模板來實現的;但在某些情況下,您可能不希望這樣做 - 也許您不希望您的客戶看到實施的來源。

相反,您可以在標題中聲明模板;然後定義它,並在源文件中顯式實例化所需的所有特化。