什么是模板(精)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如果是类类型,则需加关键字class。例如:
template <class T> void swap(T& a, T& b) { T temp=a; a=b; b=temp; }
三、函数模板与模板函数 函数模板是对一组函数的描述,它不是一个实实在在的函 数,表示每次它能单独处理在类型形式参数中说明的数据类型。 编译器不会为其产生任何执行代码。 当编译器发现有函数调用:函数名(实参数),当实参数与 函数模板形参数相匹配时,则产生一个重载函数。该重载函数 与函数模板实现功能相同(函数体定义相同)。该重载函数称为 模板函数(template function)。 下面举例说明了函数模板的定义和使用方法。
The C++ template mechanism allows a type to be a parameter in the definition of a class or a function. A template depends only on the properties that is actually uses from its parameter type and does not require different type used as arguments to be explicitly related.
这两个函数的参数个数、实现代码是相同的,只有形参的 类型不同。如果将两函数中的int 和float 进行参数化,使用参 数T 替代,则交换任何一对数据类型的变量(包括类对象)可以 定义为: Template < T > void swap(T& a, T& b) { T temp=a; a=b; b=temp; } 有了上述定义,对任一类型T 的两个变量或类对象(x1,x2), 函数调用swap(x1,x2) 编译器都能理解并执行函数模板所确定的 功能。
Templates provide a simple way to represent a wide range of general concepts and simple ways to combine them.
Templates provide direct support for generic programming, that is programming using types as parameters.
例如:编写求两个数中较小值的函数模板,并计算几个模板函 数的值 #include <iostream.h> template <class T> T min(T a, T b) { return a<b?a:b; } void main() { int x1=15, y1=25; float x2=3.14, y2=1.41; char x3=„m‟, y3=„n‟;
注意:在模板函数min(x1,y1) 调用时,函数类型T 代表int 类型, 编译器生成的模板函数定义为: int min(int a, int b) { return a<b?a:b; }
在模板函数min(x2,y2) 调用时,T代表float 型; 在模板函数min(x3,y3) 调用时,T代表char 型。 函数模板与模板函数的关系如下图所示:
cout<<“min(x1,y1)=”<<min(x1,y1)<<endl; cout<<“min(x2,y2)=”<<min(x2,y2)<<endl; cout<<“min(x3,y3)=”<<min(x3,y3)<<endl; } 输出结果:
min(x1,y1)=15 min(x2,y2)=1.41 min(x3,y3)=m
函数模板
min(T a, T b)
实例化 实例化 实例化
模板函数 min(int a, int b)
… min(float a, float b) …
模板函数
模板函数 min(A a, A b)
其区别是: 函数模板是模板的定义,不是一个函数,定义中使用通用 的类型参数; 模板函数是用函数模板实例化的函数。它是一个实实在在 的函数定义,它由编译器遇到模板函数调用时所生成,具有可 执行的程序代码。
二、函数模板的定义 函数模板提供了具有处理相同功能的一类函数的抽象,它以 任意类型T 为参数,其定义形式如下: template <参数化类型名表> <返回类型> <函数名> (<参数表>) { //<函数体> }
其中,template 是定义函数模板的关键字,<参数化类型名表> 可以包含基本数据类型,也可以包含类类型。
Hale Waihona Puke §16.2 函数模板(Function templates)
一、为什么要使用函数模板 考察两个swap() 函数,一个交换整型数,一个交换浮点数。 尽管函数的功能一样、仅处理数据类型不同,但对有强数据类 型校验的C++ 语言,必须使用函数重载,分别编写代码。 void swap(int& a, int& b) { int temp=a; a=b; b=temp; } void swap(float& a, float& b) { float temp=a; a=b; b=temp; }
四、重载函数模板 C++ 允许函数模板被一个或多个同名的非模板函数重载。 例如,
template <class T> T max(T a, T b) { return a>b?a:b; }
int max(int, int); //显式地说明函数模板的一个重载函数 void f(int i, char c) //一般函数
第十六章
§16.1 §16.2 §16.3

函数模板 类模板

什么是模板
第十六章小结
第十六章 模板(Templates)
模板是C++ 语言相对较新的一个重要特性。
本章介绍模板的概念、定义和使用方法。
§16.1 什么是模板
模板是一种工具,模板可以使程序员能建立具有通用类型 的函数库和类库。 模板也是C++ 语言支持参数多态性的工具。 C++ 语言的程序结构主要是由函数和类构成的,模板具有 两种不同的形式: 函数模板和类模板。
相关文档
最新文档