C 模板的例項化與模板的特化,顯示特化示例。

2021-10-03 00:04:34 字數 1205 閱讀 6077

模板例項化:從通用版本中實現乙個特化版本的實現,如將函式模板顯式特化。

模板特化:指定編譯器呼叫哪一種型別的實現

先看 乙個最簡單的模板形式,如下。

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 模板作為乙個泛化手段,與之相對,對於某種特殊場合,可能要對模板進行相應的特化,偏特化處理。模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有...