类模板小析

原创 2006年06月18日 16:50:00

这里讨论下类模板的定义和实现的编译要求。

在VC里,编译器并不要求模板类的定义和实现一定要在一个.h头文件或.cpp文件内实现(不像有些资料说的那样),但是VC的编译器要求你在调用模板的模块INCLUDE上模板所有的实现文件,仅此要求。而标准C++除此之外还支持分开编译,但是模板实现要加export,这个关键字在VC里是不支持的。

VC中类模板实现和定义分开的例子如下
/****file template.h*******/
template<class T>class mytemplate{/********/};

/****file template.cpp*******/
#include "template.h"
template<class T> mytemplate<T>::myfun(){/***/}
/****other codes***/

/******file user.cpp*******/
#include template.cpp //注意了,这里是.cpp实现文件
/****other codes******/

VC中类模板实现和定义在一个.h或.cpp中完成的例子就不用举了,这也是平时最常用的方法。

标准C++中类模板实现和定义分开的例子如下
/****file template.h*******/
template<class T>class mytemplate{/********/};

/****file template.cpp*******/
#include "template.h"
//注意,这里用export关键字,VC不支持。
export template<class T> mytemplate<T>::myfun(){/***/}
/****other codes***/

/******file user.cpp*******/
#include template.h //注意了,这里是.h声明定义文件
/****other codes******/

至于标准C++类模板实现和定义在一个.h或.cpp中完成的例子和VC是一样的。
类模板分开编译和在一个文件内实现在用户功能上是一样的,但是编译器在这两种方法上却有较大的区分。分开编译可以节省编译时间,只进行单次编译(事实上上面那种VC的分开实现方法只是感觉上的,在编译器看来和在一个文件内实现是完全一样的,所以VC编译器在对类模板永远不会单次编译)减小生成文件的大小,但是开销会稍大。而在一个.h或.cpp中完全实现一个类模板在有的时候会使生成可执行文件变的过于庞大,但是节省了一点开销。
所以说这两种方法各有利弊。在适当的时候,可根据情况做出选择。
应该提供这样一个思想:无论作为一个单位编译,还是分成一些独立的编译单位,这些代码都应能够以同样的方式进行工作。接近这种理想的方式应该是限制模板定义对其环境的依赖性,避免在进入实例化的过程中带入过多的环境信息,Bjarne如是说。在我看来,这还是从类模板的角度来强调数据的独立性吧。

初次写文,欢迎讨论!

【前端】模板继承

模板继承
  • lilydedbb
  • lilydedbb
  • 2016年12月22日 17:16
  • 250

ICallbackEventHandler 小析

项目中经常会用到查找的功能,比如查找某个设备了,某个人了,所以想写一个控件类似于scriptaculous new Ajax.Autocompleter (...),于是就查询下如何在asp.net ...
  • wildhorseli
  • wildhorseli
  • 2007年04月25日 13:17
  • 1018

Mysql存储引擎小析

一、简介        数据库中有的表存储的数据主要应对查询,比如一些字典表,费率表,有些表主要应对修改,比如评论表的和反馈表,有的表读和写的频率都很高,比如商品表。根据不同的情况可使用不同的存储引...
  • zhangbaolin
  • zhangbaolin
  • 2015年01月26日 15:44
  • 279

OLAP小析

在看OLAP相关书籍过程中,沿作者思路,水到渠成,然后有感书中内容,写成笔记形式的文章。理解OLAP和Analysis ServicesBI是一种好的思维方式,它为决策提供有效的支持。数据仓库作为BI...
  • qianchsh
  • qianchsh
  • 2007年03月31日 18:04
  • 512

小析override & overload

一、overload,译为重载,是C++提供的一种处理函数重名的机制。void f(float) { ... }void f(int) { ... }在C中上面代码不能通过编译,而在C++中却可以。这...
  • Lodger007
  • Lodger007
  • 2006年07月27日 21:04
  • 1610

Python发送邮件小析

采用smtp模块和email模块发送电子邮件附件。发送一个未知MIME类型的文件附件其基本思路如下: 1、构造MIMEMultipart对象做为根容器 2、构造MIMEText对象做为邮件显示内容...
  • u013359114
  • u013359114
  • 2016年03月12日 10:12
  • 89

FastMarchingImageFilter.cxx 初步小析

 版本:/*========================================================================= Program: Insight ...
  • p2227
  • p2227
  • 2010年03月31日 15:18
  • 961

背包小析

分组背包问题:       有一个背包容量为 V , 一个有 n 个物品,每个物品都有 k(1 至 k) 种选择(但是选择该物品的时候只能选择其中的一种) 例如:  a[i][j] 的意思是,选择第 ...
  • the_love_story
  • the_love_story
  • 2016年08月07日 18:56
  • 113

KMP算法小析

对于串的模式匹配算法,相信学data structure的都不会很陌生,不过当我们看到各种书上对算法KMP的讲解时,我们会有种不知所云的感觉就算有的C++的算法实现,和例子的讲解,当换成另外一个串时,...
  • sinpoal
  • sinpoal
  • 2010年03月15日 22:20
  • 253

《小美好》短评文本情感分析+生成词云

向AI转型的程序员都关注了这个号???大数据挖掘DT数据分析  公众号: datadw因为最近看了一下《致我们单纯的小美好》,虽然情节是有点“二”吧,但是看了觉得真的很怀念初高中的日子,一时玩心大发,...
  • meyh0x5vDTk48P2
  • meyh0x5vDTk48P2
  • 2018年01月08日 00:00
  • 128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类模板小析
举报原因:
原因补充:

(最多只允许输入30个字)