泛型在c++中的主要實現為模板函式和模板類。
通常使用普通的函式實現乙個與資料型別有關的演算法是很繁瑣的,比如兩個數的加法,要
考慮很多態別:
int add(int a,int b)
float add(float a,float b)
。。。。
雖然在c++中可以通過函式過載來解決這個問題,但是反覆寫相同演算法的函式是比較枯燥與繁瑣的,
更重要的是函式過載是靜態編譯,執行時占用過多記憶體。
在此我們可以用c++的模板函式來表達通用型的函式,如下:
template// 模板宣告
t add(t a,t b) // 注意形參和返回值的型別
這時c++編譯器會根據add函式的引數型別來生成乙個與之對應的帶具體引數型別的函式並
呼叫。
例如:#include
using namespace std;
template
t add(t a,t b) //注意形參和返回型別
void main()
函式模板的性質
1) 函式模板並不是真正的函式,它只是c++編譯生成具體函式的乙個模子。
2) 函式模板本身並不生成函式,實際生成的函式是替換函式模板的那個函式,比如上例中的add(sum1,sum2),
這種替換是編譯期就繫結的。
3) 函式模板不是只編譯乙份滿足多重需要,而是為每一種替換它的函式編譯乙份。
4) 函式模板不允許自動型別轉換。
5) 函式模板不可以設定預設模板實參。比如template 不可以。
c++模版函式的語法
template
函式返回型別 函式名(形參列表…)
上面兩行可以合併成一行。
例如:下面的幾種寫法是等效的並且class 和typename是可以互換的。
template
t1 fun(t1, t2, int )
template t1 fun(t1, t2, int )
template
t1 fun(t1, t2, int )
template t1 fun(t1, t2, int )
類模板的性質
1) 類模板不是真正的類,它只是c++編譯器生成具體類的乙個模子。
2) 類模板可以設定預設模板實參。
c++模版類的語法
template
class 類名
成員的實現…
例如://類宣告部分,有兩個模板引數t1,t2
template
class a
//類實現部分
template
int a:: fun1(t1 x, int y )
template
t2 a:: fun2(t1 x, t2 y)
//使用類a
int main( )
由上例可以看出, 類模板引數t1,t2對類的成員變數和成員函式均有效。
在c++程式設計中,當你要實現的乙個類的某些成員函式和成員變數的演算法
資料型別有關,可以考慮用類模板。c++版的資料結構演算法大都用類模板實現。
在C 事件處理中靈活應用泛型
在.net 1.1中處理事件時很麻煩的事情。比如建立下面這個類 serializable public class logentry set string message 事件內容 public string message set 等你需要把logentry當成引數傳遞時,就需要建立兩個新的型別l...
在C 事件處理中靈活應用泛型
在.net 1.1中處理事件時很麻煩的事情。比如建立下面這個類 serializable public class logentry set string message 事件內容 public string message set 等你需要把logentry當成引數傳遞時,就需要建立兩個新的型別l...
C 中泛型類,泛型方法,泛型約束實際應用
所謂泛型,即通過引數化型別來實現在同乙份 上操作多種資料型別。泛型程式設計是一種程式設計正規化,它利用 引數化型別 將型別抽象化,從而實現更為靈活的復用。在定義泛型類時,在對客戶端 能夠在例項化類時,可以用型別引數的型別種類施加限制。在搭建底層框架時,是最常見的程式設計方式。泛型類範例 namesp...