博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数模板的用法,以及类外定义的注意事项
阅读量:6657 次
发布时间:2019-06-25

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

先来个例子:

1 #include 
2 3 using namespace std; 4 5 6 template
7 t1 ff(t1 a,t1 b,t2 c) 8 { 9 cout<
<<' '<
<

需要注意的地方有:

1.template关键字表示声明的是模板。

2.<>中时模板的参数表,可以有一项或多项,其中的类型名称为参数化类型,是一种抽象类型或可变类型。

3.class是类型关键字,也可以用typename作为关键字。

4.函数返回值类型可以是普通类型,也可以是模板参数表中指定的类型。

5.模板参数表中的参数类型可以是普通类型。

 

函数模板定义好后,即可生成各种具体的函数,该过程称之为实例化。函数模板实例化分为显式实例化与隐式实例化。(前面的例子即为隐式实例化)

显式实例化举例:

1 #include 
2 3 using namespace std; 4 5 6 template
7 t1 ff(t1 a,t1 b,t2 c) 8 { 9 cout<
<<' '<
<
(1,2,3.1);16 ff
(1.2,2.0,'a');17 return 0;18 }

注意一点:当程序里同时出现重载函数和函数模板时,优先绑定重载函数,若是不能精确匹配,方匹配函数模板。

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

class A{    template 
::type>::value>::type> void f (const std::string& key, T value);};template
inline void A::f (const std::string& key, T value){ ///}

这里是一个项目中用到的例子,T是整数类型,is_integral包含所有整数类型,remove_reference是去引用(如果不这样做,调用方传参带引用,匹配会失败,因为带引用的type与指针类似,不能称之为整数),类外实现带的声明与类内差异很大,V仅仅用作形式上与类内声明保持匹配,没有实际意义。

另外需要注意的是,模板默认内联,必须把实现体放在对应头文件里。

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

你可能感兴趣的文章
2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/mor
查看>>
OSI模型
查看>>
Java之品优购课程讲义_day14(7)
查看>>
大快DKhadoop大数据处理平台详解
查看>>
如何制作出像顶尖咨询公司咨询顾问们那种风格的 PPT?
查看>>
共享经济影响电商 华亚优品商城凭“共创共享”模式受捧
查看>>
Swarm群集搭建
查看>>
shell
查看>>
造成HashMap非线程安全的原因
查看>>
嵌入式Linux内核学习路线和学习linux内核的建议
查看>>
Esxi更新补丁
查看>>
ldap理论属于概念缩略词
查看>>
Virtualization API之libvirt
查看>>
Android卡顿优化:卡顿分析方法
查看>>
Oracle教程之管理表空间(十二)--监控表空间
查看>>
人生若只如初见
查看>>
Ext4.1中文API文档已经全部翻译完成!
查看>>
linux下tomcat 管理端无法进入
查看>>
GPU加速有坑?
查看>>
Java 正则表达式(三)
查看>>