什麼是特化?
沒有特化的c++模版中,不管傳入引數是什麼型別,都是一樣的處理方式。但是當我們需要針對某個特定的型別做特殊的處理的時候,這個時候就需要用到特化了。
全特化
我們可以將某乙個類或某乙個函式單獨拿出來特化。
舉個例子:
template
<
class
t>
class
vector
private
: size_t _size;
size_t _capacity;
t* _data;};
template
<
>
class
vector
<
char
>
private
: size_t _size;
size_t _capacity;
char
* _data;
};
偏特化
偏特化是指在不止有乙個型別時,我只特化其中一種或多種型別。
舉個例子:
template
<
classt1,
class
t2>
class
vector
private
: size_t _size;
size_t _capacity;
t* _data;};
template
<
class
t1>
class
vector
<
classt1,
char
>
private
: size_t _size;
size_t _capacity;
char
* _data;
};
型別萃取
一種方法能夠在同乙個類中實現對不同型別去執行不同的方法。
一般步驟如下:
定義乙個型別(一般是空類),區分內建型別與自定義型別:
struct _atype
;struct _btype
;
特化需要特化的型別:template
<
class
t>
class
typetraits
;// special
template
<
>
struct typetraits<
int>
;template
<
>
struct typetraits<
char
>
;
過載函式:template
<
class
t>
void
_func
(t t, _atype)
;template
<
class
t>
void
_func
(t t, _btype)
;
使用:template
<
class
t>
void
func
(t t)
05模版的全特化與偏特化
編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。全特化將模板中模板引數全部指定為確定的型別。類全特化 template classt1,class t2 class atemplate class a intfloat 簡單案例 include 類全特化 template ...
C 模板全特化 偏特化
大家都對c 的模板程式設計應該都能很熟練使用了,下面就是一段很簡單不過的例子了 模板函式 templatevoid func t num1,n num2 cout num1 num1 num2 num2 static bool comp t num1,n num2 return num1 特化其實就...
C 全特化與偏特化
c 中用模板來實現 的復用,模板分為類模板與函式模板,雖然模板引進到c 中的時間不長,可是卻在很多方面有很多的應用,比如標準模板庫stl中就有很多應用,然而當我們仔細的學習stl就會發現其中的模板充斥著很多的全特化與偏特化模板,那麼什麼是特化模板呢?我們前面學習了模板知道了編譯的時候編譯器可以根據型...