主版本模板類
首先我們來看一段初學者都能看懂,應用了模板的程式:
更極端的,這樣的特化是否該歸為第5類呢:
template
class y;
template
class y;//針對帶兩個引數,有返回值的函式型別特化
1 #include 2程式很簡單,乙個模板類a,它有乙個列印兩個引數的函式。我們在main函式裡建立了以int,char為型別的類a的物件,呼叫函式後,得到了我們要的結果:using
namespace
std;
34 template
5classa11
};12
intmain()
value1 = 12上面的模板類a,我們通常稱作是主版本模板類value2 =b
請按任意鍵繼續. . .
,它的主要特點是:模板類中所有的型別都是模板型別。
2. 全特化
首先我們需要了解乙個概念,什麼叫特化。特化其實就是特殊化的意思,在模板類裡,所有的型別都是模板(template
),而一旦我們將所有的模板型別t都明確化,並且寫了乙個類名與主模板類名相同的類,那麼這個類就叫做全特化類
。下面的**就是全特化的乙個演示:
1 #include 2上面**中著色的部分就是經過全特化的類a,可以看到主版本模板類中的t1和t2已經全部明確化為int和double。接著在main裡用「aa;」例項化物件時,程式會去呼叫這個全特化的類。乙個類被稱為全特化類的條件:1.必須有乙個主模板類 2.模板型別被全部明確化。using
namespace
std;
34 template
5classa11
};12
13 template<>
14class a
20};
2122
intmain()
3. 偏特化
上面對主版本模板類和全特化類進行了定義,那麼偏特化就是介於二者之間的模板類,它的類名與主版本模板類相同,但是它的模板型別中,有被明確化的部分和沒有被明確化的部分。下面就是一段偏特化的演示**:
1 #include 2上面**著色部分就是乙個偏特化的模板類,可以看到主版本模板類中的t1和t2中的t1被明確化為int。接著在main裡用「aa;」例項化物件時,程式會去呼叫這個偏特化的。乙個類被稱為偏特化類的條件:1.必須有乙個主模板類 2.模板型別被部分明確化。using
namespace
std;
34 template
5classa11
};12
13 template
14class a
20};
2122
intmain()
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 template6. 結語2class
number6};
78 template
9classa15
};16
17 template
18class a, number>
24 };
當然,本文只是粗淺的讓讀者理解什麼是模板的特化,就深度而言,本文也只是觸及皮毛,模板的精妙技巧本文並未涉及,敬請期待。
分類:
[010_c++基礎]
類模板 模板類
下面定義的是類模板,用int例項化t後成為模板類。例項化類模板的語法 類名 模板實參表 結合下例即 array就是將類模板array例項化為模板類的語法。類模板 include using namespace std templateclass array array t operator int ...
類模板和模板類
c 提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。函式模板的一般說明形式如下 template 模板形參表 返回值型別 函式名 模板函式形參表 其中,模板形參表 可以包含基本資料型別...
類模板與模板類
1.類模板與模板類的概念 什麼是類模板乙個類模板 也稱為類屬類或類生成類 允許使用者為類定義一種模式,使得類中的某些資料成員 默寫成員函式的引數 某些成員函式的返回值,能夠取任意型別 包括系統預定義的和使用者自定義的 如果乙個類中資料成員的資料型別不能確定,或者是某個成員函式的引數或返回值的型別不能...