类模板:
可以用typename或者class去定义,但class容易被误认为是一个类,这里的参数一般都是全部大写
template<typename T,int SIZE/*非类型参数*/>
bool compare(T a,T b)
{
T elems[SIZE];
return a>b;
}
其中 int SIZE的作用是,在数组初始化的时候,需要定义数组长度,而这个非类型参数就是作用在这里
使用时初始化T参数类型实例化模板,例如
int a=1;int b=2;
compare<int,10>(a,b);
当然也可以不给尖括号输入参数类型,这叫做隐式实例化
函数模板:
template<typename T,int VAL>
T addValue(const T& x)
{
return x+VAL;
}
所有经过该函数模板的值都被增加了一个VAL大小的整形(不考虑是否能够加上去)
函数的返回类型是被调用时被定义的
限制:
非类型 模板参数是有限制的,他可以是int enum类型,指针,或者通过hpp指向外部链接对象的指针
但不能是浮点类型,类对象类型
网友评论