C++基础 -36- 模板之模板函数

模板函数格式
C++基础 -36- 模板之模板函数_第1张图片

template <class T>
void allexchange(T a,T b)
{
    T c;
    c=*a;
    *a=*b;
    *b=c;
}

模板函数可以增强函数的通用性
举例说明,使用一个模板函数实现了两个的函数的功能
C++基础 -36- 模板之模板函数_第2张图片

#include "iostream"

using namespace std;

void myexchangeint(int* a,int* b)
{
    int c;
    c=*a;
    *a=*b;
    *b=c;
}

void myexchangestring(string* a,string* b)
{
    string c;
    c=*a;
    *a=*b;
    *b=c;
}

template <class T>
void allexchange(T a,T b)
{
    T c;
    c=*a;
    *a=*b;
    *b=c;
}


int main()
{
    int a=10;
    int b=20;
    string c="hello";
    string d="world";
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    cout << d << endl;
    myexchangeint(&a,&b);
    myexchangestring(&c,&d);
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    cout << d << endl;
    allexchange(&a,&b);
    allexchange(&c,&d);
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    cout << d << endl;
}

模板函数存在多形参情况,如果类型不同会推导失败

解决办法一,限定类型

C++基础 -36- 模板之模板函数_第3张图片
C++基础 -36- 模板之模板函数_第4张图片

#include "iostream"

using namespace std;
template <class T>
T add(T a,T b)
{
    return a+b;
}

int main()
{
    int a=1;
    float b=3.14;
    add<int>(a,b);
}

解决办法二,根据形参定义多个通用类型
C++基础 -36- 模板之模板函数_第5张图片

#include "iostream"

using namespace std;

template <class T,class T1>
T add(T a,T1 b)
{
    return a+b;
}


int main()
{
    int a=1;
    float b=3.14;
    add(a,b);
}

你可能感兴趣的:(C++,c++,开发语言)