模板函数 实例化与具体化

        首先,实例化从字面上来看就是产生一个实际的事物。在函数模板中就是产生一个特定的函数定义,例如有一个swap函数:

        template<typename T>

        void swap(T& a,T& b) {…}

        使用模板,并不意味着我们生成了一系列的函数定义,而是一种方案,当我们传递类型进入的时候才生成出对应的swap函数定义,比如现在swap<int>(a,b) 实际上就是产生了void swap(int a,int b);这样的一个函数定义,这被称之为隐式实例化,即在编译的时候提供类型创建一个对应的函数定义。

        在以前C++只支持隐式实例化,但现在增加了显式实例化,也就是说可以显式的定义出类型,并对之实现对应的函数定义。显式实例化的语法是声明所需的种类,用<>符号指示类型,并在声明前加上关键词template,例如:

        template void swap<int>(int,int);

        当编译器看到这行声明后,将使用swap模板生成一个使用int类型的实例。也就是说,该声明的意思是使用swap模板生成int类型的函数定义。

       

        其次是,显式具体化,同样是int类型,显式具体化可以有这样两种写法:

        template <> void swap<int>(int&,int&);

        template <> void sawp(int&,int&);

*在同一个文件中使用同一种类型的显式实例化和显式具体化将爆炸

        然而,显式具体化是阻止使用模板方案来生成对应的函数定义,并且使用专门为int类型显式地定义的函数定义,简单来说就是为int类型专门写了一个对应的版本。

转载于:https://www.cnblogs.com/HotPants/p/11559736.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值