關於模板中的全特化和偏特化

2021-10-02 07:55:35 字數 1337 閱讀 3216

模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。

模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。

先看類模板:

template

<

typename t1,

typename t2>

class

test

private

: t1 a;

t2 b;};

template

<

>

class

test

<

int,

char

>

private

:int a;

char b;};

template

<

typename t2>

class

test

<

char

, t2>

private

:char a;

t2 b;

};

那麼下面3句依次呼叫類模板、全特化與偏特化:

test<

double

,double

>t1(

0.1,

0.2)

; test<

int,

char

>t2(

1,'a')

; test<

char

,bool

>t3(

'a',

true

);

而對於函式模板,卻只有全特化,不能偏特化:

//模板函式  

template

<

typename t1,

typename t2>

void

fun(t1 a , t2 b)

//全特化

template

<

>

void fun<

int,

char

>

(int a,

char b)

//函式不存在偏特化:下面的**是錯誤的

/* templatevoid fun(char a, t2 b)

{ cout<<"偏特化"<

至於為什麼函式不能偏特化,似乎不是因為語言實現不了,而是因為偏特化的功能可以通過函式的過載完成。

模板的全特化和偏特化

特化是什麼?模板引數在某種特定型別下的具體實現稱為模板的特化 為什麼要有特化?因為編譯器認為,對於特定的模板引數型別,如果你實現的更好,那就用你實現的 注意 模板的全特化和偏特化都是在已定義的模板基礎之上,不能單獨存在。還是拿我們之前的順序表舉栗子 templateclass vector temp...

模板的偏特化,全特化

c 中的模板分為類模板和函式模板 模板的特化分為倆種 全特化和偏特化 全特化 舉乙個簡單的例子 可以發現,ab呼叫的是我們全特化後的版本,而aa呼叫的是原始版本。偏特化 偏特化又稱為區域性特化,全特化是對所有的模板引數進行特化,偏特化是對區域性的引數特化 乙個簡單的例子 templateclass ...

C 模板全特化 偏特化

大家都對c 的模板程式設計應該都能很熟練使用了,下面就是一段很簡單不過的例子了 模板函式 templatevoid func t num1,n num2 cout num1 num1 num2 num2 static bool comp t num1,n num2 return num1 特化其實就...