主版本模板類

2021-09-30 10:20:25 字數 2387 閱讀 6413

主版本模板類

首先我們來看一段初學者都能看懂,應用了模板的程式:

更極端的,這樣的特化是否該歸為第5類呢: 

template

class y; 

template

class y;//針對帶兩個引數,有返回值的函式型別特化 

1 #include 2

using

namespace

std;

34 template

5classa11

};12

intmain()

程式很簡單,乙個模板類a,它有乙個列印兩個引數的函式。我們在main函式裡建立了以int,char為型別的類a的物件,呼叫函式後,得到了我們要的結果:

value1 = 12

value2 =b

請按任意鍵繼續. . .

上面的模板類a,我們通常稱作是主版本模板類

,它的主要特點是:模板類中所有的型別都是模板型別。

2. 全特化

首先我們需要了解乙個概念,什麼叫特化。特化其實就是特殊化的意思,在模板類裡,所有的型別都是模板(template

),而一旦我們將所有的模板型別t都明確化,並且寫了乙個類名與主模板類名相同的類,那麼這個類就叫做全特化類

。下面的**就是全特化的乙個演示:

1 #include 2

using

namespace

std;

34 template

5classa11

};12

13 template<>

14class a

20};

2122

intmain()

上面**中著色的部分就是經過全特化的類a,可以看到主版本模板類中的t1和t2已經全部明確化為int和double。接著在main裡用「aa;」例項化物件時,程式會去呼叫這個全特化的類。乙個類被稱為全特化類的條件:1.必須有乙個主模板類   2.模板型別被全部明確化。

3. 偏特化

上面對主版本模板類和全特化類進行了定義,那麼偏特化就是介於二者之間的模板類,它的類名與主版本模板類相同,但是它的模板型別中,有被明確化的部分和沒有被明確化的部分。下面就是一段偏特化的演示**:

1 #include 2

using

namespace

std;

34 template

5classa11

};12

13 template

14class a

20};

2122

intmain()

上面**著色部分就是乙個偏特化的模板類,可以看到主版本模板類中的t1和t2中的t1被明確化為int。接著在main裡用「aa;」例項化物件時,程式會去呼叫這個偏特化的。乙個類被稱為偏特化類的條件:1.必須有乙個主模板類   2.模板型別被部分明確化。

4. 模板類呼叫優先順序

對主版本模板類、全特化類、偏特化類的呼叫優先順序從高到低進行排序是:全特化類》偏特化類》主版本模板類。這樣的優先順序順序對效能也是最好的。

5. 其他特化型別

在特化的時候,我們將主版本模板類中的模板型別進行特化,按照特化為的型別,我們可以進行一下分類:

①.絕對型別特化

②.引用/指標型別特化

③.轉化為另外乙個類模板

下面我們來乙個乙個研究一下這三種特化:

①.絕對型別特化

所謂絕對型別特化,就是將模板型別t特化為制定的普通資料型別或自定義資料型別。**如下:

1

class mytype5};

67 template

8classa14

};15

16 template<>

17class a

23 };

②.引用/指標型別特化

1 template

2classa8

};910 template

11class a

17};

1819 template

20class a

26 };

③.轉化為另外乙個類模板

1 template

2class

number6};

78 template

9classa15

};16

17 template

18class a, number>

24 };

6. 結語

當然,本文只是粗淺的讓讀者理解什麼是模板的特化,就深度而言,本文也只是觸及皮毛,模板的精妙技巧本文並未涉及,敬請期待。

分類: 

[010_c++基礎]

類模板 模板類

下面定義的是類模板,用int例項化t後成為模板類。例項化類模板的語法 類名 模板實參表 結合下例即 array就是將類模板array例項化為模板類的語法。類模板 include using namespace std templateclass array array t operator int ...

類模板和模板類

c 提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。函式模板的一般說明形式如下 template 模板形參表 返回值型別 函式名 模板函式形參表 其中,模板形參表 可以包含基本資料型別...

類模板與模板類

1.類模板與模板類的概念 什麼是類模板乙個類模板 也稱為類屬類或類生成類 允許使用者為類定義一種模式,使得類中的某些資料成員 默寫成員函式的引數 某些成員函式的返回值,能夠取任意型別 包括系統預定義的和使用者自定義的 如果乙個類中資料成員的資料型別不能確定,或者是某個成員函式的引數或返回值的型別不能...