為啥要用模板
我們知道有很多不同的對象類型可能有相同的操作,基本類型如數值類型的都有加減乘除,比大小啊.一個個從現實中抽象出來的類就更是具體很多共性了.如果是同一類事物可以弄個父類出來就OK,比如動物都具體的某些通用操作就搞個animal基類完事.但如果不是同一類事物,就不容易整個繼承關系出來啊.比如人有身高,可以計算體重,一塊石頭也有長寬高,可以計算體重.如果有一個計算體重的函數,大家都可以拿來用,只要傳不同的參數就行.函數重載可以實現類似的功能,但太麻煩了點,要整蠻多個函數啊.
於是在C++中就出現了模板(template)的概念.類中應用到模板就叫類模板,函數中應用到模板就叫函數模板.所謂模板嘛,就是個架子框架,我們拿來填充些內容才有實際用處.像做PPT時就有很多模板啊.C++中的模板就是裡面用到一些變量,類型是不知道的.只有你調用的時候傳個具體的類型,然後才會生成具體的類或模板,然後再調用.當然這是編譯器後台給你做了很多工作.使用模板編程又叫泛型編程.
C#裡面沒有模板的概念,不過有個泛型的概念.有點像把模板簡化一下了.當然它們還是有些其他區別的.
C++模板用法
函數模板
舉個最簡單的例子,比較兩數大小
template<typename T> //也可以把typename換成class,T也可以隨便換成啥
T max(T one, T two)
{
return one > two ? one : two;
}
int a = 123;
int b = 456;
int c = max(a,b);
類模板
template<typename TT>
class Simple
{
public:
TT Max(TT a,TT b)
{
return a > b ? a : b;
}
}
;
double a = 123;
double b = 543;
Simple<double> sm;
double c = sm.Max(a,b);
C#泛型
class Temp<T>
{
public bool Max(T a, T b)
{
if (a.Equals(b))
return true;
else
return false;
}
}
Temp<int> temp = new Temp<int>();
int a = 123;
int b = 123;
bool result = temp.Max(a, b);