注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

(转载)非类型模板参数知识点梳理  

2016-08-09 14:00:46|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

非类型模板参数知识点梳理

 

http://blog.csdn.net/zero_lee/article/details/7864375

版权声明:本文为博主原创文章,未经博主允许不得转载。

对于函数模板和类模板,模板参数并不局限于类型,普通值也可以作为模板参数。
1. 非类型的类模板

[cpp] view plain copy

 print?

1.   template <typename T, int MAXSIZE>  

2.   class Stack {  

3.   private:  

4.       T elems[MAXSIZE];  

5.   ...  

6.   };  

7.     

8.     

9.   template <typename T, int MAXSIZE>  

10.  Stack<T, MAXSIZE>::Stack()  

11.  : numElems(0)  

12.  {  

13.  }  



2. 非类型的函数模板参数

[cpp] view plain copy

 print?

1.   template <typename T, int VAL>  

2.   T addValue(T const& v)  

3.   {  

4.       return x + VAL;  

5.   }  

6.     

7.     

8.   std::transform(v.begin(), v.end(), v.begin(), addValue<int, 5>);  

9.   };  


3. 非类型的模板参数的限制
非类型的模板参数是有限制的。通常而言,它们可以是常整数(包括枚举类型)或者指向外部链接对象的指针。
<strong>
浮点数和类对象是不允许作为非类型模板参数的。</strong>
例如下面2个模板类是编译不过的:

[cpp] view plain copy

 print?

1.   template <double VAT>  

2.   double process(double v)  

3.   {  

4.       return v * VAT;  

5.   }  

6.   template <std::string name>  

7.   class MyClass {  

8.   ...  

9.   };  



由于字符串文字是内部链接对象(因为两个具有相同名称但处于不同模板的字符串,是两个完全不同的对象),所以不能使用它们来作为模板实参:

[cpp] view plain copy

 print?

1.   template <const char* name>  

2.   class MyClass {  

3.   ...  

4.   };  

5.     

6.     

7.   MyClass<"hello"> x; // error  


另外,也不能使用全局指针作为模板参数:

[cpp] view plain copy

 print?

1.   template <const char* name>  

2.   class MyClass {  

3.   ...  

4.   };  

5.     

6.     

7.   const char* s = "hello";  

8.   MyClass<s> x;   // error  



然而,可以这样使用:

[cpp] view plain copy

 print?

1.   template <const char* name>  

2.   class MyClass {  

3.   ...  

4.   };  

5.     

6.     

7.   extern const char s[] = "hello";  

8.   MyClass<s> x; // ok  



全局字符数组s"hello"初始化,是一个外部链接对象。

 

  评论这张
 
阅读(89)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017