模版函数

来源:互联网 发布:汽车解剖软件 编辑:程序博客网 时间:2024/05/01 10:59

一、函数模版
1、概念:
C++提供了函数模板(function template)。
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。
这个通用函数就称为函数模板。
凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。
在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。
这里写图片描述

2、定义方式
//声明Template
//替换参数类型Func(T a)

3、调用
(1)自动数据类型推导
func(a);
(2)显示类型调用
Func(a);

二、函数模版遇上函数重载
1、区别:
普通函数可以自动进行隐性转换,而模版函数不可以;
例如:
普通函数:void print(int a,int b)
模版函数:void Myprint(T a,T b)
Main()
{
Char a = ‘a’;
Int b = 10;
//分别用两种函数混合调用
Print(a,b); 结果65,10,字符自动转换成int类型
Myprint(a,b)//编译出错,不让通过;
}

2、模块函数重载
首先知道模版函数会和普通函数一样被重载,所以当一个普通函数遇到一个模版函数的时候也是重载
(1)编译器默认先调用普通函数;
(2)如果模版函数产生一个跟好的匹配,那么会调用模版函数
(3)想调用模版函数的话就模版实参列表的语法来让编译器只调用模版函数func<>(a);