模板例項化:從通用版本中實現乙個特化版本的實現,如將函式模板顯式特化。
模板特化:指定編譯器呼叫哪一種型別的實現
先看 乙個最簡單的模板形式,如下。
template
<
typename t>
t max
(t a, t b)
我們知道這乙個模板可以將任意兩個型別相同並且可以使用 " > " 進行比較的變數進行比較,並且可以得到比較結果為大,所對應的變數或者是物件。但是如果我們想要針對某一種特定型別進行定製,使模板可以表現出與上面模板所不同的行為,可以使用下面這種寫法。
//主模板與上文相同
template
<
typename t>
t max
(t a, t b)
//顯式特化版本的 max模板特化int型別模板函式
template
<
>
int max<
int>
(int a,
int b)
intmain()
在**中我們呼叫了max函式模板的int版本。在輸出結果中可以看到我們成功的執行了我們想要的結果,輸出了 int,10。在執行max(5,10);時是直接將max()指向了int型別的特化版本,從而沒有發生模板的例項化。
我們思考上文比較大小是否會正確執行呢?
如當比較的兩變數是指標型別時是否會出錯?是比較的位址大小或者是指標所指向物件的大小。
測試**如下
#include
template
<
typename t>
t max
(t a, t b)
intmain()
#include
template
<
typename t>
t max
(t a, t b)
template
<
>
int* max<
int*
>
(int
* a,
int* b)
intmain()
通過兩次執行的結果都為10可以看出程式的執行是符合預期的。 函式與類 模板的例項化與特化
首先,我們給出模板函式和模板類的定義 template void swap t a,t b template class myclass double dnum 12.2 double dnum2 4.4 swap dnum,dnum2 myclassmyobj 需要注意的一點,隱式例項化時,編譯器...
C 模板與特化
模板,template,是一種將資料型別參化的工具,提供了一種將 與資料類相脫離的機制,即 不受具體的資料的型別的影響,從而為c 提供了泛型程式設計的方式,減少冗餘 的同時依然可以提供型別安全。模板分為兩種 特化,specialization,是針對某個特定的型別,在模板定義時給出不同一般資料型別的...
C 模板 特化 與 偏特化
c 模板作為乙個泛化手段,與之相對,對於某種特殊場合,可能要對模板進行相應的特化,偏特化處理。模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有...