分享
 
 
 

C++ Template学习笔记之函数模板(1)——函数模板定义

王朝c/c++·作者佚名  2006-01-22
窄屏简体版  字體: |||超大  

说明:本笔记是参考《C++ Primer(3rd)》中文版

函数模板提供了一种机制,通过它可以保留函数定义和函数调用的语义(在一个程序位置上封装了一段代码,确保在函数调用之前实参只被计算一次),而无需象宏方案那样绕过C++的强类型检查。如:

template <class Type>

Type min(Type a,Type b)

{

return a<b ? a : b;

}

关键字template总是放在模板的定义与声明的最前面。关键字后面是用逗号分隔的模板参数表,它用尖括号(<>)括起来。该列表是模板参数表,不能为空。模板参数分为:(1) 模板类型参数,代表一种类型;(2) 模板非类型参数,代表一个常量表达式。

模板类型参数由关键字class或typename后加一个标识符构成。在函数的模板参数表中,这两个关键字的意义相同。它们表示后面的参数名代表一个潜在的内置或用户定义的类型。

模板非类型参数由一个普通的参数声明构成。模板非类型参数表示该参数名代表了一个潜在的值,而该值代表了模板定义中的一个常量。如:

template <class Type,int size>

Type min(Type (&arr)[size]);

规则:

1. 如果在全局域中声明了与模板参数同名的对象、函数或类型,则该全局名将被隐藏。

2. 在函数模板定义中声明的对象或类型不能与模板参数同名。

3. 模板类型参数名可以被用来指定函数模板的返回位。

4. 模板参数名在同一模板参数表中只能被使用一次,但可在多个函数模板声明或定义之间被重复使用。

通过将关键字typename引入到C++中,我们可以对模板定义进行分析。为了分析模板定义,编译器必须能够区分出是类型以及不是类型的表达式。如(Parm代表一个类):

template <class Parm,class U>

Parm minus(Parm* array,U value)

{

Parm::name * P; // 这是一个指针声明还是乘法?答案是乘法

}

编译器不知道name是否为一个类型,因为它只有在模板被实例化之后才能找到Parm表示的类的定义。为了让编译器能够分析模板定义,用户必须指示编译器哪些表达式是类型表达式。告诉编译器一个表达式是类型表达式的机制是在表达式前加上关键字typename。如:

template <class Parm,class U>

Parm minus(Parm* array,U value)

{

typename Parm::name * P; // 这是指针声明

}

函数模板也可被声明为inline或extern。但应把指示符放在模板参数表后面,而不是在template前面:

template <typename Type>

inline

Type min(Type,Type);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有