C++ 函数模板一(函数模板定义)

//函数模板定义--数据类型做参数
#include<iostream>
using namespace std;

/*
函数模板声明
1.函数模板定义由模板说明和函数定义组成,并且一个模板说明对应一个函数定义
2.模板说明的类属参数必须在函数定义中至少出现一次
3.函数参数表中可以使用类属类型参数,也可以使用一般类型参数
*/

/*
template关键字告诉c++编译器现在要进行泛型编程
typename或者class告诉c++编译器T是一个数据类型,不要进行语法检查
typename和class完全可以互相替换
*/
template<typename T>//也可以写成template<class T>
void myswap(T &a, T &b){
    T c = a;
    a = b;
    b = c;
};
//void Print(T &a,T &b){
//    cout << "a=" << a << "
b=" << b << endl;
//}
//报错:一个模板说明只能对应一个函数定义,想再定义一个函数,必须再写一个模板声明

template<class T>
void Print(T &a, T &b){
    cout << "a=" << a << "
b=" << b << endl;
}

//多参数的函数模板
template<typename T1,typename T2>
//这种定义当调用函数时就会报错  MySort(a);
//模板说明的类属参数必须在函数定义中至少出现一次
void MySort(T1 a){
    cout << "aaa" << endl;
}

template<typename T>
void Getnum(T a,int b){
    cout << "a=" << a << ";
b="<<b << endl;
}

void main(){
    int a=1;
    int b = 2;
    //泛型编程函数的使用方法1---自动类型推导
    myswap(a, b);
    Print(a, b);
    //泛型编程函数的使用方法2---显式具体类型调用
    myswap<int>(a, b);
    Print(a, b);
    //MySort(a);    报错 : error C2783: “void MySort(T1)”: 未能为“T2”推导 模板 参数
    cout << "----------------" << endl;
    Getnum(a, 4);
    system("pause");
}
原文地址:https://www.cnblogs.com/zhanggaofeng/p/5656670.html