付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、针对(returnx 针对(returnx y?x :doublemax_double(doublex,doublereturnx y?x :stringmax_string(stringx,stringreturnx y?x :借助参数宏摆脱类型的借助参数宏摆脱类型的#definemax(x,y)(x)(y)?(x):(y) cout max (123, 456) endl;coutmax(1.23,4.56)stringa=o,b =coutmax(a,b)couty ?x :y;MAX)MAXMAX#definemax(T)cout)(123,456)coutmax(double)(1.
2、23,4.56)coutmax(string)o,world)模板 templatetypename1, typename 类型参数2, . template A function (b arg) _C类型参类型参 templatetypenameTconst&max(Tconst&x,Tconst&returnx y ?y :模板templateTconst&max模板templateTconst&maxTconst&x,Tconst&y)returnxy?y:x;const&maxconst&const&returnx y?y :x;doubleconst&max(doubleconst&
3、x,doubleconst&returnx y?y :x;stringconst&max(stringconst&x,stringconst&y)returnxy?y:x;使用函数模板时才实例 函数模板名类型实参1,2,使用函数模板时才实例 函数模板名(123, :max(1.23, :maxo,二次编一次是在实例化之前,先检查模板代码本身,查看语法是否正确形式的机器指令作为第一二次编一次是在实例化之前,先检查模板代码本身,查看语法是否正确形式的机器指令作为第一次编译的结果,仅仅是在编译形成的用于描述该函数模板的数据结构,即所谓模板表【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK
4、根据调用参数推断模板根据调用参数推断模板voidfoo(Tconst&x,Tconst&y)coutT=typeid(T).name()endl;foo (123, 456); / T = i doublex=1.23,y=4.56;foo (x,y);/T=foofooo,world);/T=otarena不能隐式推断的三种情不是全部模板参数都与调用参不能隐式推断的三种情不是全部模板参数都与调用参数的类型templatevoidfoo(Aarg).Vvar.foo123,string隐式推断的同时不允许隐式类型templatevoidfoo(Tx,Ty).foo1234.56foo(123,
5、foo (double)123, 4.56); / 显式类型转换可以隐返回类型不能隐式templateRfoo(Aarg).retfoo1.23ret=隐式推断与缺省值之间template隐式推断与缺省值之间templateTconst&max(Tconst&x,Tconst&returnx y?y :coutmax1.234.56endl g+.-std=c+0 x /GCC 4.8 g+.-std=c+11/GCC cout:max(1.23,4.56)endl;/【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK普通函数和函数重普通函数和函数重charconst*const&m
6、ax(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./charconst*x=ABC; char const* y = AB;cout:max(x,y)endl;/cout:max(100,200)endl;/函数模板不支持隐式类型转charconst*函数模板不支持隐式类型转charconst*const&max(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./charconst*x=ABC; char* y = AB;c
7、out:max(x,y)endl;/显式指定空模板参数列显式指定空模板参数列charconst*const&max(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./templatetypenameT*const&max(T*const&x,T*const&y)./char const* x = AB; charconst*y=ABC;cout:max(x,y)endl;/保证模板参数与调用参数一保证模板参数与调用参数一Tconst&max(Tconst&x,Tconst&y)./templatetypenam
8、eT*const&max(T*const&x,T*const&y)./charconst*x=charconst*y=cout:max(x,y)endl;/函数模板内优先选择普通函charconst*函数模板内优先选择普通函charconst*const&max(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./templatetypenameTconst&max(Tconst&x,Tconst&y,Tconst&return:max(:max(x,y),z);/charconst*x=ABC; char co
9、nst* y = AB; char const* z = A;cout:max(x,y,z)template模板 templatetypename1, typename 类型参数2, .template class MyClass Abfoo(_C类型参templatetypenameM,typename类型参templateclassMyClass:public MRfunction(Aarg).Vvar.typedefT* 类模板的两步实例编译期:编译类模板的两步实例编译期:编译器将类模板实例化为类并生成对象创建运行期:处理器执行对象创建指令将类实例化为内存 类模板名类型实参1,2,调用谁
10、实例化template调用谁实例化templateclass T const& max (void) const returnm_xm_y?m_y:m_x;egerbooloperatorci(123,coutci.max()ci(123,【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK类模板的静态成templateclass 类模板的静态成templateclass sicvoid(void)cout&m_i &m_tendl;ssicTm_t;【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK类模板的递归实classArray类模板的递归实classArrayTa1;
11、a2a3;【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK全类特templateclassComparatorchar 全类特templateclassComparatorchar Comparator(charconst*const&charconst*const&y):m_x(x),m_y(y) char const* const& max (void) const returnstrcmp(m_x,m_y)0?m_y:m_x;charconst*const&m_x,o,coutcmp.max()endl;/成员特templateclass Comparator成员特templ
12、ateclass Comparator(Tconst&x,Tconst&y): m_x (x), m_y (y) Tconst&max(void)returnm_xm_y?m_ym_x;Tconst&m_x,&m_y;templatecharconst*const&Comparator:max (void) const returnstrcmp(m_x,m_y)0?m_y:m_x;【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK对部分模板参数自行指templateclass对部分模板参数自行指templateclassX/ 针对第二个模板参数取short的局部特templatecl
13、assX/ 针对两个模板参数取相同类型的局部特templateclassX/ 针对两个模板参数取某种类型指针的局部特templateclassX/ 针对两个模板参数取某种的局部templateclassX/ 针对两个模板参数取某种类型数组的局部特templateclassX同等程度地特化匹配导致歧 同等程度地特化匹配导致歧 *xtemplateclassXtemplateclassX *【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK类模板可以带有缺省参实例化类模板时,如果提供了模板实参则用所提供的模板实参实例化相应的模板形参,如果没有提供模板实参则相应的模板形参取缺省值类模板可以
14、带有缺省参实例化类模板时,如果提供了模板实参则用所提供的模板实参实例化相应的模板形参,如果没有提供模板实参则相应的模板形参取缺省值 templateclassX. Xx1(.);/Xx1Xx2(.);/Xx2Xx3(.);/,double,stringx3后面的参数可前面参 templatetypenameA,后面的参数可前面参 template templatetypenameT,typenameC=vector class Stack voidpush(Tconst&m_contain (elem); 【参见:TTSCOOKBOOK【参见:TTSCOOKBOOK非类型模板参非类型模板参数值形式模板参普通数值作为模板参templatetypenameT,size_t普通数值作为模板参templateclass
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年山西同文职业技术学院马克思主义基本原理概论期末考试模拟题带答案解析(夺冠)
- 2025年曲沃县幼儿园教师招教考试备考题库附答案解析
- 2025年九寨沟县幼儿园教师招教考试备考题库附答案解析
- 2025年花垣县招教考试备考题库附答案解析
- 2025年青岛港湾职业技术学院单招职业适应性考试题库附答案解析
- 2025年上栗县招教考试备考题库含答案解析(夺冠)
- 2025年和县招教考试备考题库带答案解析
- 2025年绍兴文理学院元培学院马克思主义基本原理概论期末考试模拟题含答案解析(夺冠)
- 2025年赫章县招教考试备考题库带答案解析
- 2024年积石山县招教考试备考题库带答案解析(夺冠)
- 村卫生室药品管理规范
- 铸件清理工上岗证考试题库及答案
- GB/T 32223-2025建筑门窗五金件通用要求
- 非煤矿山行业企业班组长(含车间主任)工伤预防能力提升培训大纲
- 2021金属非金属矿山在用架空乘人装置安全检验规范
- 道路工程施工组织设计1
- 《特种设备使用单位落实使用安全主体责任监督管理规定》知识培训
- 医院培训课件:《临床输血过程管理》
- 制粒岗位年终总结
- 《中国心力衰竭诊断和治疗指南2024》解读(总)
- 《MSA测量系统分析》考核试题
评论
0/150
提交评论