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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

暇隙读书(9)——模板中的几个知识点---C++Templates  

2013-05-30 21:13:25|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

暇隙读书(9)——模板中的几个知识点---C++Templates

最近一直很忙,估计下个月仍然更忙,今天装电脑的时间继续看了一会儿模板的书籍,点点滴滴汇聚起来吧,日积月累,以成永恒之功。

首先说一下模板的参数和模板的实参,前者是指:位于模板声明或定义内部,关键字template后面所列举的名称;而后者指:用来替换模板参数的各个对象(比如常用的以double等替换T)。有一个基本的原则:模板实参必须是一个可以在编译期确定的模板实体或者值。

需要说明的是:成员函数模板不可以被声明成虚函数。原因很简单,虚表的存在是迟后联编,而模板需要在编译期确定。但是普通的函数还是可以声明成虚函数的。

模板的参数大致有三种类型:

类类型、非类类型和模板的模板参数。前面两个讲过很多了,举一个第三个的例子:

Template <typename T,T*Root,template<T*> class Buf>

Class Structure;

需要引起注意的是,在类型参数中,class typename已经有了特定的含义,在模板就不允许再使用其修饰,即使其是一个要被class类型替换的参数也不可以:

Template <typename Allocator>

Class List

{

         Class Allocator* allocator;    //error

         Friend class Allocator;       //error;

};

而非类型参数中,必须是以下几种:整形或枚举类型;指针类型;引用类型。

在模板的模板参数中有一个特别需要引起注意的是:对于模板的模板参数而言,它的参数名称只能被自身其他的参数的声明使用,看下面:

Template <template<typename T,T*>class Buf>

Class Lexer

{

         Static char storage[5];

         Buf<char,&Lexer<Buf>::storage[0] > buf;

};

Template<template<typename T> class List>

Class Node

{

         Static T* storage;//错误,模板的模板参数的参数在这里不能被使用

};

 

筚路蓝缕,以启山林之秀。

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

历史上的今天

评论

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

页脚

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