模板的全特化與偏特化

2021-09-08 12:31:27 字數 1280 閱讀 8745

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

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

先看類模板:

[cpp]view plain

copy

template  

class test  

;  template<>  

class test  

;  template   

class test  

;  

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

[cpp]view plain

copy

test t1(0.1,0.2);  

test t2(1,'a');  

test t3('a',true);  

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

[cpp]view plain

copy

//模板函式  

template  

void fun(t1 a , t2 b)  

//全特化  

template<>  

void fun(int a, char b)  

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

/* template

void fun(char a, t2 b) 

*/  

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

**:c++ 模板全特化中的函式特化

[cpp]view plain

copy

print?

#include 

using namespace std;  

template  

bool isless(t x, t y)   

template<>  

bool isless(int* x, int* y)   

int main()   

一旦為某個模板做了特化,編譯器將不會再為該特化所涉及的型別生成對應的例項化

特化目的是為了解決通用模板不能精確解決的問題

模板的特化版本依賴於通用模板,通用模板必須在所有特化模板之前宣告(定義)

**:

模板的全特化與偏特化

模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。先看類模板 cpp view plain copy temp...

模板的全特化與偏特化

模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。先看類模板 cpp view plain copy temp...

模板的偏特化,全特化

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