C 中的模板特化及函式模板特化和函式過載的對比

2021-09-29 01:49:40 字數 1522 閱讀 9531

template

<

classt1,

class

t2>

class

test

};

上面是一段普通模板類的**

1.1全特化

template

<

>

//全特化template中缺寫

class

test

<

char

,int

>

};

1.2.偏特化

template

<

class

t1>

//偏特化template缺掉要例項的那個型別

class

test

int>

};

通過上面全特化和偏特化的**可以看出:模板的全特化就是將模板的全部型別例項化,偏特化就是將模板的部分型別例項化。

注意:1、特化必須針對乙個已經存在的函式模板,不能單獨存在。

2、函式模板特化方式參考類模板特化

template

<

classt1,

class

t2>

void

fun(t1 a,t2 b)

//模板函式

template

<

>

//模板函式的全特化

void

fun(

char a,

int b)

template

<

class

t1>

//模板函式的偏特化

void

fun(t1 a,

float b)

void

fun(

char a,

float b)

//模板函式的函式過載1

void

fun(

char a,

int b)

//模板函式的函式過載2

總結:1.傳入型別匹配度越高呼叫優先順序越高

2.若傳入型別對函式過載和模板函式的全特化一樣高則優先呼叫函式過載

3.模板函式(類)不存在,模板函式(類)特化就不存在,函式過載就不會。

函式模板的特化

函式模板的特化 該定義中乙個或多個模板形參的實際型別或實際值是指定的。特化形式如下 關鍵字template後面接一對空的尖括號 再接模板名和一對尖括號,及括號中指定這個特化定義的模板形參 函式形參表 函式體 template int compare const char const v1,const...

函式模板的特化

include include using namespace std 泛型版本 template int compare const t v1,const t v2 為實參型別 const char 提供特化版本 template int compare const char const v1,c...

函式模板「偏特化」 (C )

模板是c 中很重要的乙個特性,利用模板可以編寫出型別無關的通用 極大的減少了 量,提公升工作效率。c 中包含類模板 函式模板,對於需要特殊處理的型別,可以通過特化的方式來實現特定型別的特殊操作。最近工作中,需要處理cont這種復合型別和t這種自定義型別的模板特化,因為cont型別有五種左右需要特殊處...