C++ Templates读书笔记 Tricky Basics

   C++ Templates读书笔记< 二 > Tricky Basics

* 关键字typename,用来说明某个标志符是个型别.

eg: 
1          template  <  typename T  >
2           class  MyClass
3          {
4              typename T::SubType *  ptr;
5              
6          };
* assignment运算的template版本并不会取代default assignment运算

* 双重模板参数: Template Template Parameters
eg:
 1          template  <  typename T, 
 2                  template  <  typename ELEM
 3                             typename ALLOC  =  std::alloctator < ELEM >   >  
 4                   class  CONT  =  std::deque
 5                   >
 6           class  Stack
 7          {
 8              COUT < T >  elems;         //  以第一个参数的型别完成了实例化,  也可以利用class template内的任何型别 来实例化
10          };
11       //  注:template template arguments必须完全匹配对应的参数。预设的template arguments会被编译器忽略。
12      // 所以,如果上面没有写 typename ALLOC  =  std::alloctator < ELEM >  就会报错
function templates 不允许拥有template template parameters
* 初始化
eg:
 1          template  <  typename T  >
 2           class  MyClass
 3          {
 4           private :
 5              T x;
 6           public :
 7              MyClass()
 8                  : x()     //  即使T为build-in type,x也可以被初始化
 9              {
10              }
11          };

* 只有by value传参时,才会发生 array to pointer 的转换

eg:

 1  template  <  typename T  >
 2          inline T  const &  max( T  const &  a, T  const &  b )
 3          {
 4               return  a  <  b  ?  b : a;
 5          }
 6          
 7          max(  " apple " " peach "  );     //  ok
 8          max(  " apple " " tomato "  );     //  error, 型别不同,一个是char const[6],一个是char const[7]
 9          
10          template  <  typename T  >
11          inline T max( T a, T b )
12          {
13               return  a  <  b  ?  b : a;
14          }
15          
16          max(  " apple " " peach "  );     //  ok
17          max(  " apple " " tomato "  );     //  ok, 发生了array to pointer的转换, 但比较结果是错的,因为实际上比较的是指针地址


版权声明
:本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!

小祥的BLOG http://xfxsworld.cnblogs.com 

 

转载于:https://www.cnblogs.com/xfxsworld/archive/2009/01/02/1367007.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值