C++(模板)
一、函数
前言
模板使C++中的一种泛型编程语法,允许用户在编写函数或者编写类的的时候使用,使用户编写的数据类型不固定,会在入参时,根据数据类型自动改变。
1、函数模板
就是编写函数时使用的模板,可以用 T 代替函数形参列表的任意数据类型,使数据类型不定。
1)函数模板的语法
template <typename T1,typename T2,....,typename Tn> // 想要有几个不一样的不确定的数据类型,就写几个
函数返回值 函数名(由T代替数据类型的形参列表){函数定义
}注意:函数模板中,T 只能是一种类型,没有提升匹配,不会通过数据类型的兼容性 或 隐式转换,转换成其他匹配的类型
2)函数模板的使用
当调用 func() 函数的时候,T 会更具入参,自动变化
当实参与形参不完全匹配时会报错,不会进行提升匹配
(这个问题很好解决,这里只是展示不能提升匹配)
3)关于函数模板的潜规则
由于 T 可以代替所有数据类型,自然包括多级指针,多级地址,如果都由 T 来代替,会无法区分
因此 T 不允许表示任意类型的指针,指针标识符必须写在 T 外面,如:T*、T**、T*** ······
4)函数模板全特化的语法
template <typename T1,typename T2,....,typename Tn>
函数返回值 函数名(由T代替数据类型的形参列表){函数定义
}
//在以上函数模板的基础上,进行以下特化
template <>
返回值类型 函数名<特化类型1,特化类型2,...,特化类型n>(特化类型行参列表){函数定义
}
5)函数模板全特化的使用
当我们由特殊需求,一个函数模板里的逻辑代码不能满足时,可以专门为这个特殊的属性类型写一个全特化的函数模板
函数模板练习:
1:请使用函数模板,写一个能够针对所有数据类型的数据的快速排序函数,并多写几个数组做测试