函数模板基本语法
语法
1 2 3 4 5 template <class T1 ,...,class Tn > //template <typename T>void FunName (T1 x1 ,...,Tn xn ){ }
template是语义是模板的意思,尖括号中先写关键字typename或是
class,后面跟一个类型T,此类即是虚拟的类型。至于为什么用T用的人多了,也
就是T了。
函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况。
如 果个数不同,则不能用函数模板。
普通函数会进行隐式的数据类型转换, 函数模板不提供隐式的数据类型转
换 必须是严格的匹配。
当函数模板和普通函数都符合调⽤用时,优先选择普通函数
当函数模板和普通函数都符合调用时,优先选择普通函数
若显示使用函数模板,则使用<> 类型列表
如果 函数模板产生更好的匹配 使用函数模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std ;template <class T > //template <typename T>void MySwap (T &a ,T &b ) { T temp = a; cout << a << " " << b << endl ; a = b; b = temp; cout << a << " " << b << endl ; } void test01 () { int a = 1 , b = 2 ; double da = 1.1 , db = 2.2 ; MySwap(a,b); MySwap<double >(da,db); } int main (char *argv[], int argc) { test01(); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <iostream> using namespace std ;int Max (int a, int b) {cout << "int Max(int a, int b)" << endl ;return a > b ? a : b;} template <typename T>T Max (T a, T b) { cout << "T Max(T a, T b)" << endl ; return a > b ? a : b; } template <typename T>T Max (T a, T b, T c) { cout << "T Max(T a, T b, T c)" << endl ; return Max(Max(a, b), c); } int main () { int a = 1 ; int b = 2 ; cout << Max(a, b) << endl ; cout << Max<>(a, b) << endl ; cout << Max(3.0 , 4.0 ) << endl ; cout << Max(5.0 , 6.0 , 7.0 ) << endl ; cout << Max('a' , 100 ) << endl ; return 0 ; }