1.型別形參:
templatevoid h(t a)
這樣的呼叫方式會出錯,因為該語句給同一模板形參t指定了倆種不同的型別(int,double)templatevoid h(t a,t b)
{} void test()
2.非型別模板形參:
非型別模板形參的形參和實參間所允許的轉換
允許從陣列到指標,從函式到指標。
2.const修飾符的轉換templateclass a
{};
void test()
3.提公升轉換(short——int)templateclass a {};
void test()
4.整值轉換(int ——unsigned int)
模板形參總結:
型別引數:可以給類模板的型別形參提供預設值,但不能給函式模板的型別形參提供預設值。
非型別引數:函式模板和類模板都可以為類模板的非型別形參提供預設值
給類模板的型別形參預設值的方式:
templateclass aa{};
類模板的型別引數提供預設值的方式與函式預設一樣,要從右向左,不能給t1提供預設值而不給t2。
在類模板的外部定義類中的成員時template後的形參表應省略預設的形參型別
模板的模板引數:template class a
;viod a::h()
{}
3.模板的分離編譯:
解決方法:
在模板標頭檔案***.h裡面顯示例項化->模板類的定義後面新增template class seqlist;
一般不推薦這種方法,一方面老編譯器可能不支援,另一方面例項化依賴呼叫者
將宣告和定義放在同乙個檔案「***.hpp」裡面,新增使用這種方法
可變引數模板
乙個可變引數模板就是乙個接受可變數目引數的模板函式或模板類。可變數目的引數被稱為引數包 parameter packet 存在兩種引數包 模板引數包 template parameter packet 表示零個或多個模板引數 函式引數包 function parameter packet 表示零個或...
可變引數模板
可變引數,也就是讓函式可以接受可變數量引數的函式。使用方法 m print 也就是0引數將會在可變引數函式m print t x,args.args 呼叫void m print 可變引數模板 可變引數模板m print t x,args.args 通過遞迴呼叫m print args.或者m pr...
可變引數模板
三個點代表此處的u為一包型別,b為一包形參,可以輸入任意多的引數,sizeof.可以檢視一包引數中的引數個數,不是占用的位元組數。引數包的展開 如何去處理引數包裡的每乙個引數呢,這裡就需要用到遞迴的展開方法 void func templatevoid func const t a,const u ...