欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模板的偏特化

程序员文章站 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();
}

运行结果:
模板的偏特化

四、调用顺序

我们首先要知道一点:偏特化是建立在基础模板上的,实现偏特化首先要定义基础模板。

由上面的例子,我们可以看出,它的调用顺序遵循:如果实例化参数符合偏特化模板,优先调用符合模板参数个数最多的偏特化模板,如果实例化参数都不符合偏特化模板,则调用基础模板。

相关标签: C/C++ c++