C 模版全特化 偏特化 型別萃取

2021-10-02 17:30:46 字數 1840 閱讀 3639

什麼是特化?

沒有特化的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就會發現其中的模板充斥著很多的全特化與偏特化模板,那麼什麼是特化模板呢?我們前面學習了模板知道了編譯的時候編譯器可以根據型...