当前位置 博文首页 > DL_fan的博客:C++模板的一些基础知识

    DL_fan的博客:C++模板的一些基础知识

    作者:[db:作者] 时间:2021-06-25 09:22

    一.函数模板

    可看出就是将函数返回类型和形参类型去掉。

    1.代码1

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <map>
    #include <fstream>
    using namespace std;
    
    template<typename T>
    void swap_(T& a, T& b ){
        T temp = a;
        a = b;
        b = temp;
    }
    int main()
    {
    
        //1.自动类型推导 必须要一致的数据类型才可用
        int a1 = 10, b1 = 20;
        cout<<a1<<" "<<b1<<endl;
        swap_(a1, b1);
        cout<<a1<<" "<<b1<<endl;
    
        float a2 = 10.01, b2 = 20.55;
        cout<<a2<<" "<<b2<<endl;
        swap_(a2, b2);
        cout<<a2<<" "<<b2<<endl;
    
        //2.显示指定类型
        swap_<int>(a1, b1);
        cout<<a1<<" "<<b1<<endl;
        swap_<float>(a2, b2);
        cout<<a2<<" "<<b2<<endl;
        return 0;
    }

    有两种使用方式,一个是自动类型推导(必须要一致的数据类型才可用),一个是显示指定类型。

    2.代码2

    将类型作为参数,用template修饰函数模板,解决不同类型函数但实现逻辑一样的问题

    #include <iostream>
    using namespace std;
    
    
    template <typename T>//函数模板
    void display(T a)
    {
        cout<<"a:"<<a<<endl;
        cout<<"======="<<endl;
    }
    
    template <typename T,typename S>//函数模板
    void display(T t, S s)
    {   
        cout<<"t:"<<t<<endl;
        cout<<"s:"<<s<<endl;
        cout<<"======="<<endl;
    }
    
    template <typename T,int KSize>//函数模板
    void display(T a)
    {
        for (int i=0;i<KSize;i++)
        {
            cout<<"a:"<<a<<endl;
        }
    
    }
    
    int main()
    {   
        display<int>(10);//模板函数
        display<double>(10.89);//模板函数
    
        display<int,float>(11,12.11);//模板函数
    
    
        display<int, 5>(11);
        return 0;
    }
    上一篇:没有了
    下一篇:没有了