c++模板笔记(2)

1.模板的定义和声明分别放在hpp文件和cpp文件的时候,会出现链接错误,解决这个问题有三种方法:
       1)在hpp文件的末尾加上#include“.hpp"
       2)在#include".hpp"的地方同时也加上#include".cpp"
       3)不要cpp文件,定义放在hpp下面 
2.typename在模板中有两个作用,一个是放在template后面,表示后面的是一个模板参数,另一个是typename表示引用模板类内的类型,例如typename T::type *a;这个定义说明type是在T类型内定义的,如果不加typename的话就是说明使用type×a;
3.模板的参数,模板的参数包括类型参数,非类型参数,模板的模板参数;可以作为非类型实参的类型有整型,枚举类型,指针类型,引用类型。浮点类型和字符类型的都不可以。
例如:类型参数
     template<typename T>
     T max(const T &a,const T &b)
    {return a>b?a:b;}
   非类型参数
   template<typename T,int value>
   T addvalue(T const &a)
  {return a+value;}
  模板的模板参数
  template<typename T,template<typename T2,typename T3>class T4>
  class test{};
4.模板的特化和实例化,偏特化
模板的实例化是指有模板类或者模板函数得到具体类或者函数的过程;模板特化是指得到的最后实体。特化可以为类增加成员变量或者成员函数,特化的定义:让某个类能够更好的适应这个具体的类型。例如我在定义一个鸟类的时候,由于企鹅也是一种鸟,但是它不会飞,那我就在特化为企鹅的时候,我可以重新定义这个鸟类飞的方法。
5.模板和内联
模板和内联没有直接的关系,如果要定义为内联函数,则就要在函数名前加上inline,或者隐式内联。
6.模板和虚函数
类的成员函数和虚函数是相互排斥的,如果定义为虚函数的化就不能定义为模板函数,如果定义为模板函数就不能定义为虚函数。
7.显式实例化
默认情况下编译器会生成各种类型的实例,为了减少开支,可以让编译器生成几种类型的实例,也就是显式告诉编译器实例化某几种类型。显式实例化的时候,一个实例只能显式实例化一次,可以显式实例化多个类型。
例如 template max<int>(int const &a,int const &b);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值