函数模板
来源:互联网 发布:手机淘宝6.3.2 旧版本 编辑:程序博客网 时间:2024/06/05 07:37
如果让你实现一个通用的加法函数你会用什么办法呢?这里介绍几种方法:
1、函数重载
#include<iostream>using namespace std;int ADD(const int& left, const int& right){return (left + right);}char ADD(const char& left, const char& right){return (left + right);}double ADD(const double& left, const double& right){return (left + right);}int main(){cout << ADD(1, 2) << endl;cout << ADD('1', '2') << endl;cout << ADD(1.0, 2.0) << endl;system("pause");return 0;}
2、公共基类+虚函数,在这就不具体实现了。
3、函数模板
#include<iostream>using namespace std;template <class T>T ADD(T left, T right){return left + right;}int main(){cout << ADD(1, 2) << endl;cout << ADD('1', '2') << endl;cout << ADD(1.0, 2.0) << endl;system("pause");return 0;}
下面就着重来介绍下函数模板:
一、什么是函数模板
函数模板可以创建一个通用的函数,支持不同的形参,可以说是代表了一个函数家族,在使用时被实例化,根据实参的类型产生特定类型的版本,它最大的特点就是把函数使用时的数据类型作为参数。ps:上面实现通用的加法函数的第三种方法就是使用的函数模板。
模板函数的一般形式为:
template <typename Pram1,typename Pram2,......,class Pram>
返回值类型 函数名(参数列表)
{
}
在这里要为大家介绍一个关键字--------template,typename:
template是用来定义模板函数的关键字,后面的尖括号不能省略;typename是用来声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型的标识符。
注意:1、模板函数它不是函数,它是一个蓝图。编译器用模板产生指定的类或函数的特定版本,此过程称为实例化。如图所示:
2、不能用struct代替typename,但可以用class。
3、模板函数也可以定义为内敛函数(inline函数),inline关键字必须放在模板形参表之后,返回值之前。
4、类型形参的转换:一般不会转换实参以匹配已有的实例化,相反会产生新的实例。
(1)const转换:接收const引用或者const指针的函数可以分别用非const对象的引用或指针来调用。
(2)数组或函数到指针的转换:如果模板形参不是引用类型,则对数组或函数类型的实参应用常规指针转换,数组实参将当做指向其第一个元素的指针,函数实参将当 做指向函数类型的指针。
二、模板参数
函数模板的类型参数分为:模板参数和调用参数。
模板形参分为:类型形参和非类型形参。
下面是含非模板类型的参数的函数模板:
注意:1、模板形参的名字只能在模板形参之后到模板声明或定义的末尾之间使用,遵循类型屏蔽规则。
2、模板形参的名字在同一模板形参列表中出现一次。
3、所有模板形参前面必须加上class或者typename关键字修饰。
- 函数模板、类模板
- 模板--->函数模板
- 模板函数,模板类
- 模板之函数模板
- C++ 模板->模板函数
- 类模板(函数模板)
- 模板---函数模板
- 函数模板 类模板
- 浅谈模板----函数模板
- 关于模板--模板函数
- 函数模板、类模板
- 模板之函数模板
- 模板函数
- 函数模板
- 函数模板
- 函数模板
- 函数模板
- 模板函数
- 一位资深程序员大牛给予Java初学者的学习路线建议
- iOS 获取当前时间及时间戳的互换
- @Autowired注解
- Xcode9和iOS 11遇到的一些问题
- 关于java中参数传递的理解和总结
- 函数模板
- idea 出现 Cannot resolve symbol string 的问题
- Tablayout 横向滚动条的简单实现
- Flex学习之路之二十三 List的使用
- dubbo 源码学习笔记 (五) —— 注册中心模块
- 任学堂:在教育行业,我们怎么利用人工智能?
- 枚举举例,生理周期
- Eclipse创建一个简单的Springmvc程序(Maven工程)
- c3p0 MySQL连接8小时失效问题的官方解决方案