【温故而知新】C和C++3:模板

1、模板的概念:

模板并非是实实在在的类或函数,而是一个类或函数的描述,使之可以在编译时定义所需处理和返回的类型。模板可以重用逻辑相同而数据类型不同的代码以减轻开发和维护的工作量和难度。

(1)模板方法:

类模板的一般定义形式如:

template <ParamType /*形参类型表*/>
class ClassName/*类名*/
{
/*类声明体*/
}

类模板建立后,就可以创建该模板类的实例,格式如下:

ClassName<param/*实参表*/> obj;

(2)模板参数

上文中定义时使用的模板参数可以为某种类型或者非类型。前者可以用关键字typename或class指明,后者就是通常的数据类型(如int、char等),无需特别说明。举一个实例如下:

// Template.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

template<class T>
class X
{
	typename T::id i;
public:
	void f()
	{
		i.g();
	}
};

class Y
{
public:
	class id
	{
	public:
		void g()
		{
			printf("This is method g() in Class Y.\n");
		}
	};
};

int _tmain(int argc, _TCHAR* argv[])
{
	Y y;
	X<Y> xy;
	xy.f();
	return 0;
}

这个例子中说明,声明了模板类之后,可以在类中包含不同类型的成员,并可以调用不同类型成员中的方法。在上述实例中,关键字typename起到了重要作用,该关键字告诉编译器id是模板类T所定义的一个类,可以用其定义实例。如果没有该关键字,编译器将无法识别T::id的类型。从这个意义上将,typename的作用同类的声明比较相似。

(3)函数模板

函数模板定义了参数化的非成员函数,使之能用不同的参数调用相同的函数,并从模板中生成相应的代码。函数模板的基本定义格式如下:

template<模板变量声明表>
void foo()
{}

如此定义了模板函数后,函数体中可以对模板变量表中声明的数据类型进行自适应操作。从这个概念中可以看出,模板函数类似于函数的重载,但是二者是有区别的。其主要体现在重载函数更加自由,可以对不同类型进行完全不同的实现,而函数模板适用于函数结构没有改变,只是参数和返回值类型不同的场合。

2、类模板

类模板可以用来描述管理其他数据类型的通用数据类型,常用来建立通用的容器,如堆栈、链表、队列等。

同模板函数类似,在类定义之前加上模板类标识即可定义类模板:

template<class Type>
class something
{
private:
Type a;
public:
void foo();
}

在此,Type表示整个定义中的参数化数据类型,该类型可以是基本数据类型或者一个类。

在定义模板类的实例时,也需要指定模板的具体类型:

something<int> x;
时间: 2024-08-02 18:52:45

【温故而知新】C和C++3:模板的相关文章

MathType符号模板找不到了怎么办

  MathType符号模板消失示例 具体操作过程如下: 1.打开MathType软件进入到公式编辑状态,打开方式可以根据自己习惯来决定,可以在Word中通过"插入"--"对象"来完成,也可以双击现有的公式来打开,还可以直接双击MathType桌面图标来打开. 2.在MathType编辑窗口后,在MathType菜单栏中点击"视图"--"符号面板",再点击"视图"会发现"符号面板"的左边

PS设计教程之制作WordPress新闻博客模板

通常在第一次制作新闻博客模板,很难把握方向.这篇教程将为你提供如何在Adobe Photoshop中制作WordPress新闻博客主题的参考.该主题包括页眉区,图片轮换区域(包含特色文章,最近消息,按照分类显示,侧边栏,widget).如果你是初学者,跟着本教程一步一步来就可以.如果你有一定基础,亦可从本教程中获得新的收获. 点击图片,进行全屏预览. 本教程需用到的资源 · Search · 社交图标 第1步:创建文档 在PS中创建一个1200像素 x 1700像素的文档 标尺工具在本教程中非常

深入XSL(3)---模板规则和模式(转)

模板   深入XSL(3)---模板规则和模式翻译:孙一中  模板规则 模板规则由xsl:template元素来规定."match"属性标识了规则应用的源节点(集).xsl:template. 例如:一个XML文档可能包含下面的内容: This is an <emph>important</emph> point. 下列的模板规则匹配emph类型的元素,另有一个模板产生一fo:sequence 格式化对象,其font-weight属性为粗体(bold). <

jstl-jxls问题: excel模板中foreach的横向和纵向输出的问题

问题描述 jxls问题: excel模板中foreach的横向和纵向输出的问题 如图: 为什么纵向正常,横向时候index就出问题,而属性都是对的.求解

求数据库设计模板急急急

问题描述 求数据库设计模板急急急 自主选择一种系统,完成需求分析.概念设计.逻辑结构设计.规范化(3NF)及数据库的创建,并设计功能进行编程实现. 根据所选系统,自己设计多个功能,分别用存储过程.触发器完成. 存储过程或触发器的编程至少实现一个. 求好心人帮忙做一个,谢谢了 解决方案 应付作业最好能雇佣一个枪手帮你,像你这种费时不讨好的事情,想张口要现成的怕没人有时间帮你.既然网上找不到,就没办法了. 解决方案二: 好在你这种简单的需求,花个百把块钱在八戒网上发布下,很多人可以帮你做的. 解决方

前端-用php和mysql为我们实验室建立一个小网站,请问有没有合适的模板源码?

问题描述 用php和mysql为我们实验室建立一个小网站,请问有没有合适的模板源码? 自己在chinaz上下载了几个,但是不尽人意,希望有路过的朋友能够提供帮助,只有建立一个链接数据库的小网站,不用线上上运行,所以模板不用太复杂,前端有了就好,谢谢 解决方案 你应该说明网站用途,根据用途可以决定里的要用什么,只链接数据库使用phpadmin就好 解决方案二: 这样谁说你更想要的是前端的页面

用金山WPS模板制作精美简历

  临近年底,正是应届生求职以及职场人士跳槽高峰.一份好的简历虽然不至于点石成金,但是绝对可以成为最好的敲门砖,为您的面试添分加彩.WPS Office在线模板收集了多种多样的精美简历模板以及面试.求职攻略等,无论你是初入职场的毕业生,还是想要另谋高职的职场人士,都可以在这里找到适合你的一份简历! 用户登录WPS Office官网模板下载频道http://www.wps.cn/download/,在搜索框输入"简历"关键词,就可以下载各种类型的"简历"模板,据此打造

金山wps应用模板的使用技巧

  在金山wps文档中,为用户提供了非常多可以节约工作时间.提高工作效率的应用模板,不过,很多金山wps的用户却不知道,因此,小编今天就跟大家分享一下金山wps应用模板的使用技巧吧,让文档的处理变成填字游戏. 应用模板 用好模板 省时省力 模板是一个用来创建文档的原型,许多文字处理软件,都提供很多现成的模板,它们可以分别被用来制作不同类型的文本(备忘录.信件.新闻)稿,用户也可按需要定制模板.充分利用模板不仅可以使你在短时间内制作出相应的文件,而且形式.规格也会统一.美观. 1.选择模板 单击W

养车族必备实用WPS模板推荐

养车族怎样精明消费,用最少的钱跑最多的路,省钱省钱再省钱?要付诸行动的话最好有一张记账表来帮助你.金山WPS Office帮各位找到一些很容易上手使用的省油.交通.驾驶相关的WPS模板,希望各位养车一族少一些烦恼,多一些快乐! 用户登录WPS Office官方论坛(http://bbs.wps.cn/ ),可以看到WPS汽车交通类模板专题 (http://bbs.wps.cn/thread-21931824-1-1.html),上面列举了各种类型的"交通"模板,包括买车合同.油耗登记表