博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
template<class T>函数模板
阅读量:6968 次
发布时间:2019-06-27

本文共 1694 字,大约阅读时间需要 5 分钟。

//参考  http://prglab.com/cms/pages/c-tutorial/advanced-concepts/templates.php

函数模板( Function templates)

模板(Templates)使得我们可以生成通用的函数,这些函数能够接受任意数据类型的参数,可返回任意类型的值,而不需要对所有可能的数据类型进行函数重载。这在一定程度上实现了宏(macro)的作用。它们的原型定义可以是下面两种中的任何一个:

template <class identifier> function_declaration;

template <typename identifier> function_declaration;

上面两种原型定义的不同之处在关键字class 或 typename的使用。它们实际是完全等价的,因为两种表达的意思和执行都一模一样。

例如,要生成一个模板,返回两个对象中较大的一个,我们可以这样写:

template <class GenericType>

GenericType GetMax (GenericType a, GenericType b) { return (a>b?a:b); }

在第一行声明中,我们已经生成了一个通用数据类型的模板,叫做GenericType。因此在其后面的函数中,GenericType 成为一个有效的数据类型,它被用来定义了两个参数a和 b ,并被用作了函数GetMax的返回值类型。

GenericType 仍没有代表任何具体的数据类型;当函数 GetMax 被调用的时候,我们可以使用任何有效的数据类型来调用它。这个数据类型将被作为pattern来代替函数中GenericType 出现的地方。用一个类型pattern来调用一个模板的方法如下:

function <type> (parameters);

例如,要调用GetMax 来比较两个int类型的整数可以这样写:

int x,y;

GetMax <int> (x,y);

因此,GetMax 的调用就好像所有的GenericType 出现的地方都用int 来代替一样。

这里是一个例子:

// function template

#include <iostream.h>

template <class T> T GetMax (T a, T b) {

    T result;

    result = (a>b)? a : b;

    return (result);

}

int main () {

    int i=5, j=6, k;

    long l=10, m=5, n;

    k=GetMax(i,j);

    n=GetMax(l,m);

    cout << k << endl;

    cout << n << endl;

    return 0;

}

6
10

(在这个例子中,我们将通用数据类型命名为T 而不是 GenericType ,因为T短一些,并且它是模板更为通用的标示之一,虽然使用任何有效的标示符都是可以的。)

在上面的例子中,我们对同样的函数GetMax()使用了两种参数类型:int 和 long,而只写了一种函数的实现,也就是说我们写了一个函数的模板,用了两种不同的pattern来调用它。

如你所见,在我们的模板函数 GetMax() 里,类型 T 可以被用来声明新的对象

T result;

result 是一个T类型的对象, 就像a 和 b一样,也就是说,它们都是同一类型的,这种类型就是当我们调用模板函数时写在尖括号<> 中的类型。

template <class T> // 最常用的:一个class 参数。

template <class T, class U> // 两个class 参数。

template <class T, int N> // 一个class 和一个整数。

template <class T = char> // 有一个默认值。

template <int Tfunc (int)> // 参数为一个函数。

转载地址:http://ogisl.baihongyu.com/

你可能感兴趣的文章
敏捷开发
查看>>
"无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法...
查看>>
MYSQL远程连接授权
查看>>
安装hadoop图文
查看>>
Nginx的连接处理方法
查看>>
22个开源的PHP框架
查看>>
进桌面点右键就提示内存不能读,再点确定后就自动注销。
查看>>
New Features in Xcode 6
查看>>
反射应用和集合按照某个字段排序
查看>>
NFS基于linux用户和UINX用户的文件共享
查看>>
Perl UTF-8字符开关
查看>>
JAVASE 增强
查看>>
iptables常用选项及应用实例操作
查看>>
SharePoint开发部署WSP解决方案包
查看>>
redis之strings类型及操作
查看>>
C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)
查看>>
关于NetApp: Data Ontap 7 mode 和cluster mode
查看>>
升级 SQL Server 故障转移群集的限制
查看>>
Intellij idea maven web项目创建过程
查看>>
Server系列14:密码遗忘之后:非常规登录win2012服务器事件记录
查看>>