函数模板和类模板的实例化和具体化 - 2

来源:互联网 发布:51单片机c语言编程入门 编辑:程序博客网 时间:2024/05/17 09:00
 

一.函数模板

1.显示实例化(explicit instantiation)和显示具体化(explicit specialization)的区别:

(1) 形式上:

显示实例化:  template  void  Swap<int> (int ,int);

显示具体化:  template <> void Swap<int> (int,int);

             或     template<>  void Swap   (int,int);

从中我们可以看出区别在于前者以 template 打头,后者以template<> 打头

(2) 含义上:

显示实例化:使用 Swap() 模板生成 int 类型的函数定义,即使用函数模板,用具体的 int 来代替函数模板中的泛型类型,这样就不用额外写函数定义。

显示具体化:不使用Swap()模板生成函数定义,而使用专门的、独立的(即显示具体化所定义的函数)函数定义来显示的为 int 类型生成函数定义,显示具体化要有额外的函数定义部分。

2.隐式实例化(implicit instantiation)比较简单,它是在函数调用时根据参数的具体类型来确定函数模板中的泛型类型。如:

char  ch1,ch2;

……

Swap(ch1,ch2);//  此时用char 类型来替换函数模板中的通用类型

 

3.显示实例化,隐式实例化和显示具体化统称为具体化(specialization),它们的相同之处在于都是用具体的类型的函数定义,而不是通用描述。

二.类模板

1. 显示实例化和显示具体化的区别

(1)形式上:

显示实例化:      template  class  ArrayTp<string,10> ;

显示具体化:      template  <class   T, int  n>

                           class   ArrayTp

                           {

                               ……

                               ……

                            };

                             template  <>  class  ArrayTp<string,10>

                            {

                              ……

                              ……

                            };

从中可以看出,二者的区别类似于函数模板中二者的区别,一个以template 打头,一个以template <> 打头,但都要有class 关键字,因为这是类模板。

(2) 含义上:

显示实例化用通用的类模板ArrayTp生成具体类型(如string)的类定义;

显示具体化不使用类模板定义,而使用自己专用的类定义。

2.部分具体化(partial specialization)

部分具体话,是指部分限制模板的通用性。

如 有以下模板定义: template  <class T1, class T2>

      class   Pair

     {

       ……

     };

可以这样实现部分具体化: template <class T2>  class Pair<string,T2> 

                                       {

                                         ……

                                       };

template 后面的<> 出现的是未具体化的类型参数。若两个参数都具体化了,则<>内为空,就变成了显示具体化。

3.隐式实例化比较简单,它是在声明对象时根据具体的类型来代替类模板中的通用类型。如: ArrayTp<double,10>  aver;

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕吐伤了胃疼怎么办 孕期吐的胃疼怎么办 买的巧克力化了怎么办 跑步后脸上出盐怎么办 头发被剪的很短怎么办 孩子做事情拖拉不专注怎么办 新热水壶有味道怎么办 新买电热壶有味怎么办 两个月狗耳朵臭怎么办 狗狗牙齿变黄怎么办 人用了狗沐浴露怎么办 狗狗吞食牙膏吐怎么办? 狗狗吞食了牙膏怎么办 大猪拉稀不吃食怎么办 猪不发烧不吃食怎么办 天天吃自热米饭怎么办 喝了加热包水怎么办啊 蛋挞没有盒子装怎么办 塑料饭盒盖子被吸住了怎么办 火腿淹的有臭味怎么办 微波炉热饭盖子打不开怎么办 夏天带饭容易馊怎么办? 保温饭盒里有气打不开怎么办 保温饭盒摔了一下打不开怎么办 饭盒跟盖子盖一起打不开怎么办 玻璃杯子盖被水吸住打不开怎么办 电饭煲热剩饭没加水怎么办 微波炉碗盖子吸住了怎么办 微波炉转饭盖子吸住了怎么办 玻璃碗放进微波炉打不开怎么办 乐扣微波炉加热后打不开怎么办 美的微波炉盖子打不开怎么办 美的微波炉门都打不开了怎么办 饭煮好了有异味怎么办 一正常吃饭就胖怎么办 高铁盒饭没15的怎么办 上火车前票丢了怎么办 减肥期吃了汉堡怎么办 寿司店鳗鱼有刺怎么办 吃泡面胃难受该怎么办 吃上火的东西脸上长痘痘怎么办