1、定义模板类

  通过类似于下面的语法可以定义一个模板类:

template<typename T>
class Job : public virtual RefBase {
public:
class JobListener : public virtual RefBase {
public:
virtual void OnJobDone(sp< Job<T> >& job) {}
};
typedef enum {
JOB_STATE_IDLE = ,
JOB_STATE_RUNNING = ,
JOB_STATE_SUCCESS = ,
JOB_STATE_FAIL = ,
JOB_STATE_CANCELLED = ,
} job_status_t;
public:
//Job(string name, sp<T>& data);
Job(){}
Job(string name, sp<T>& data, sp<JobListener>& listener)
virtual ~Job(){} void set_job_listener(sp<JobListener>& listener) { job_listener_ = listener;}
};

template<typename T>

Job<T>::Job(string name, sp<T>& data, sp<JobListener>& listener):
  name_(name),
  data_(data),
  job_listener_(listener),
  run_next_when_fail_flag_(true),
  state_(JOB_STATE_IDLE),
  job_error_(NULL),
  next_jobs_(2) {
}

 

2、定义模板成员函数

  每个函数头都要以相同的模板声明打头,并将类限定符改成:类名<T>::这种形式。参见上面代码中的Job构造函数。

3、模板的使用方法

  通过这样的代码可以实现一个特定类型的模板对象:

Job<JobController>* jcx = new Job<JobController>("", jct, jjl);

4、特别注意!

  除非编译器实现了新的export关键字,否则将模板成员函数设置在一个独立的实现文件中将无法运行。因为模板不是函数,它们不能单独编译。模板必须与特定的模板实例化请求一起使用。为此,最简单的方法是将所有模板信息放在一个头文件里,并在要使用这些模板的文件中包含该头文件。如果编译器实现了心得export关键字,则可以将模板方法定义放在一个独立文件中,条件是每个模板声明都是以export开始:

#ifdef STACKTP_H_
#define STACKTP_H_ export template<class T>
class Stack
{
......
} #endif

  然后按常规类的方式进行:

(1)将模板类声明(包括关键字export)放在一个头文件中,并使用#include编译指令时程序能够使用这些声明。

(2)将模板类的方法定义放在源代码文件中,在该文件中包含头文件,并使用工程文件时程序能够使用这些定义。

参考链接:http://blog.csdn.net/guoxiaoqian8028/article/details/7977202

最新文章

  1. Web Mercator Non-Conformal, Non-Mercator
  2. css-css权威指南学习笔记7
  3. 【积累篇:他山之石,把玉攻】Mime 类型列表
  4. GitHub学习心得之 安装配置与多帐号管理
  5. centos 网络配置
  6. Unity小知识
  7. lib和dll的区别,生成(转)
  8. DirectShow 最简单的入门 -- 播放一段视频
  9. Scriptcase优惠活动即将结束
  10. Cocos2d-JS使用CocosDenshion引擎
  11. 关于BigDecimal的四舍五入和截断 (2007-08-10 15:06:26)
  12. 【调侃】IOC前世今生 工厂模式 反射 依赖倒置
  13. WWDC-UIKit 中协议与值类型编程实战
  14. 安装 MySQL 后,需要调整的 10 个性能配置项
  15. Linux学习之CentOS(七)---常用基本操命令1
  16. unity 3D 学习笔记
  17. HTML5:图片、音乐和视频
  18. 乌龙之Ignoring query to other database问题
  19. 【王者荣耀之IT大神版】比赛制度说明(匹配赛、排位赛、赏金赛)
  20. jQueryMobile的按钮样式

热门文章

  1. 使用Chrome工具来分析页面的绘制状态
  2. Windows Store App 偏移特效
  3. NGINX location 在配置中的优先级
  4. Five More Hacker Tools Every CISO Should Understand
  5. wdcp 打开网页显示 Apache 2 Test Page powered by CentOS
  6. DeepLearning之路(三)MLP
  7. 常用dos命令 如查询端口号是否被占用
  8. 配置ConvenientBanner时出现的问题
  9. 12-8 php基础
  10. Android 学习第4课,一些小知识