类模板小析

原创 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如是说。在我看来,这还是从类模板的角度来强调数据的独立性吧。

初次写文,欢迎讨论!

相关文章推荐

Java设计模式透析之 —— 模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作。 项目经理告诉你,今天想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML格式进行包装,这样...

Laravel 模板引擎(Blade)原理简析

转自 http://0x1.im/blog/laravel/laravel-blade-engine.html?utm_source=tuicool&utm_medium=referral ...
  • skykingf
  • skykingf
  • 2015年10月26日 17:25
  • 10870

C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2 ...
  • Al_xin
  • Al_xin
  • 2014年09月11日 08:08
  • 793

美容美白化妆产品类网站织梦模板【带手机端】

模板介绍: 适合化妆美容公司企业网站使用,小清新的绿色风格! 页面简洁简单,容易管理,DEDE内核都可以使用;附带测试数据! 模板特点: 企业网站通用模板,简单便捷, 易于管理,一款值得拥有...
  • fghrscv
  • fghrscv
  • 2017年06月08日 16:02
  • 279

C++之queue模板类

1.常用成员函数 ①size() 返回队列中元素的个数 ②empty() 如果队列空则返回真  ③back() 返回最后一个元素引用即队尾。 ④fron...

hznu 1524 排队买票(dp)【类卡特兰构造模板】

有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置互换,也算...
  • cacyth
  • cacyth
  • 2015年05月03日 20:07
  • 1446

C++中的类模板详细讲述

一、类模板定义及实例化 1. 定义一个类模板: 1 templateclass 模板参数表> 2 3 class 类名{ 4 5 // 类定义...... 6 7 };   ...
  • Andeewu
  • Andeewu
  • 2013年08月31日 14:55
  • 553

Android社交类APP常用的动态消息发布通用模板

 Android社交类APP常用的动态消息发布通用模板 我写的一个Android社交类APP常用的动态消息发布模板,作为备忘和参考,在此记下。 社交类APP用户通常会发布一些信息(一般考虑装...

c++ 类模板及exe程序怎么利用obj文件去寻找函数地址原理

~~~~我的生活,我的点点滴滴!!

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类模板小析
举报原因:
原因补充:

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