模板的偏特化
程序员文章站
2024-01-14 18:01:34
...
模板的偏特化
一、简介
偏特化,顾名思义,将部分模板参数特化
二、两种偏特化
①个数上的偏特化
个数上的偏特化:特化部分模板参数,而保留部分模板参数
②范围上的偏特化
范围上的偏特化:可能模板参数的个数不发生变化,但使某些模板参数稍微的进一步指明类型,(比如将模板参数指定为指针类型,但不知道是什么类型的指针)
三、例子
//基础模板
template<typename T,typename E>
class ZDD{
public:
void display(){
printf("display<T,E>\n");
}
};
//个数上的偏特化
template<typename T>
class ZDD<T,int>{
public:
void display(){
printf("display<T,int>\n");
}
};
//范围上的偏特化
template<typename T,typename E>
class ZDD<T *,E>{
public:
void display(){
printf("display<T *,E>\n");
}
};
//个数上的偏特化与范围上的偏特化
template<typename T>
class ZDD<T *,int>{
public:
void display(){
printf("display<T *,int>\n");
}
};
int main(){
ZDD<char,double> obj1;
ZDD<char,int> obj2;
ZDD<char *,double> obj3;
ZDD<char *,int> obj4;
obj1.display();
obj2.display();
obj3.display();
obj4.display();
}
运行结果:
四、调用顺序
我们首先要知道一点:偏特化是建立在基础模板上的,实现偏特化首先要定义基础模板。
由上面的例子,我们可以看出,它的调用顺序遵循:如果实例化参数符合偏特化模板,优先调用符合模板参数个数最多的偏特化模板,如果实例化参数都不符合偏特化模板,则调用基础模板。
上一篇: Mysql事务:释放当前锁
下一篇: mysql 手动分页语句