为啥要用模板
我们知道有很多不同的对象类型可能有相同的操作,基本类型如数值类型的都有加减乘除,比大小啊.一个个从现实中抽象出来的类就更是具体很多共性了.如果是同一类事物可以弄个父类出来就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);