C++模板template的使用

模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型

使用模板的目的就是能够让程序员编写与类型无关的代码。通常有两种形式:函数模板和类模板

一、函数模板

函数模板 针对仅参数类型不同的函数,使用函数模板可以使函数的功能不受参数类型的限制

template<class T> 中的T可以被任意的数据类型替代,template是关键字,尖括号内的是模板形参列表,模板形参列表不能为空

 

#include <iostream>
#include <memory>
using namespace std;
template<class T>
T GetMax(T a,T b)
{
    return a>b?a:b;
}
int main() {
    cout<<GetMax(2,3)<<endl;
    cout<<GetMax(1.66,5.66)<<endl;
    cout<<GetMax('a','p')<<endl;
    cout<<GetMax("string","ss")<<endl;
    return 0;
}

 

 

 

二、类模板
类模板 针对仅数据成员和成员函数类型不同的类。

#include <iostream>
#include<string>
#include <memory>
using namespace std;
template<class T>
class pclass
{
public:
    pclass()
    {

    };
    ~pclass()
    {
        cout<<"~pclass"<<endl;
    };
    T GetMax(T a, T b)
    {
        return a > b ? a : b;
    }
private:

};
int main() {
    pclass<int> p1;
    cout << p1.GetMax(2, 3) << endl;
    pclass<double> p2;
    cout << p2.GetMax(1.66, 5.66) << endl;
    pclass<char> p3;
    cout << p3.GetMax('a', 'p') << endl;
    pclass<string> p4;
    cout << p4.GetMax("string", "ss") << endl;
    return 0;
}

 

也可以通过模板类来初始化类内的成员变量

#include <iostream>
#include<string>
#include <memory>
using namespace std;
template<int n,int m>
class pclass
{
public:
    pclass()
    {
        a = n;
        b = m;
    };
    ~pclass()
    {

    };
    int GetMax()
    {
        return a > b ? a : b;
    }
private:
    int a;
    int b;
};
int main() {
    pclass<2,3> p1;
    cout << p1.GetMax() << endl;
    return 0;
}

 

三、可变参数模板

 

注意的是函数模板和类模板的使用不能混淆,

函数模板使用是直接传变量值进去,传变量类型会报错

类模板使用是直接传变量类型,初始化的时候传值进去

template<class T>
T GetMax(T a,T b)
{
    return a>b?a:b;
}

GetMax(1,2);//正确
GetMax(int ,int);//错误

template<class T>
class pclass
{
    ...
};

pclass p1<int>;//正确
pclass p2<2>;//错误

template<int n>
class pclass
{
    ...
};

pclass p1<2>;//正确
pclass p2<int>;//错误

 

 模板类的使用不能再main()函数里面,模板类必须是全局变量

posted @ 2020-04-14 17:08  知道了呀~  阅读(697)  评论(0编辑  收藏  举报