C++模板源代码的三种组织方式
来源:互联网 发布:国外美女图片网站源码 编辑:程序博客网 时间:2024/06/05 08:29
reference
模板代码和非模板代码是有区别的,如果像非模板代码那样把模板的声明放在头文件.h中,把模板的定义放在源文件.cpp中,那么使用这个模板时会得到一个链接错误。这个错误的原因在于,模板的定义还没有被实例化。为了实例化一个模板,编译器必须知道哪一个定义应该被实例化以及使用什么样的模板参数来实例化。
我们可以用以下三种方式来组织模板代码:
1. 包含模型(Inclusion Modal)
- a. 把模板的定义包含进声明模板的头文件中,如果模板声明在头文件tmpl.h中,定义在tmpl.cpp中,那可以将#include “tmpl.cpp”添加到tmpl.h文件的末尾。
- b. 或者在每一个使用模板的C++文件中包含tmpl.cpp文件来达到目的。
- c. 当然也可以不用.cpp文件,把模板声明和定义放在同一个.h文件里。
包含模型能够确保所有需要的模板都已经实例化,这是因为:当需要进行实例化的时候,C++编译系统会自动产生所对应的实例化体。
2. 显示实例化(Explicit Instantiation)
显式实例化由关键字template和紧接其后的我们所需要实例化的实体(可以是类、函数、类成员函数等)的声明组成,而且该声明是一个已经用实参完全替换参数之后的声明。
- a. template const int& max(const int& a, const int& b); // 函数模板的显式实例化
- b. template class Array; // 类模板的显式实例化
- c. template unsigned int Array::GetSize(); // 类模板成员函数的显式实例化
3. 分离模型(Separation Modal)
C++标准还给出了另一种机制来组织模板代码:导出模板(exporting template),这种机制通常也被称为C++模板的分离模型。
分离模型只需在模板声明的.h文件里加export关键字,如:
export template void func(const T&);
然而VC++编译器到目前为止并不支持分离模型。
0 0
- C++模板源代码的三种组织方式
- 模板代码的组织方式
- C程序的结构化组织方式
- Orchard 源代码的组织结构
- Spring源代码的组织结构
- Freemarker静态化加载模板的三种方式
- 文件的组织方式
- CACHE 的组织方式
- 转:C程序的结构化组织方式
- C字符串的三种遍历方式
- 三种语言的下载者源代码:C Delphi Vb
- 商城一般的组织模板
- 三种方式实现显示模板轮廓
- C/C++【初级】使用namespace的三种方式
- C++模板代码的组织方式 ――包含模式(Inclusion Model)
- c工程的组织
- C程序的组织
- Ruby 代码的组织方式
- 猫都能学会的Unity3D Shader入门指南(二)
- JSP的3个编译指令、7个动作指令和9个内置对象
- DNS记录 如果把DNS的体系结构比喻成一棵倒挂的大树,那么毫无疑问,每一条记录就是组成这棵大树必不可少的枝叶了。所谓的DNS记录,其实就是具有特殊功能的一个个数据条目。在windo
- 文件的读取
- 关于百宝云自动备份功能
- C++模板源代码的三种组织方式
- 常见多媒体播放器的几种写法
- 什么是内核?
- 输入一个链表,输出该链表中倒数第k个结点。
- 洛谷 P1011 车站
- linux源码安装git-2.10.0
- Android中的分隔线
- iframe和response.sendRedirect跳出父窗口有关问题
- 基础