zoukankan      html  css  js  c++  java
  • 浅说模板的局限性


    template<class T>
    void f(T a,T b)
    {
    a = b;
    }
    上面的赋值操作并不是都可行,比如说两个数组

    再比如
    template<class T>
    void f(T a,T b)
    {
    if(a < b){.....};
    }
    如果传的是类,怎么比较啊,并不知道比较规则啊

     不过可以通过运算符重载 ==

    不过太麻烦了

    可以通过具体化来实现

    #include<bits/stdc++.h>
    using namespace std;
    
    class person
    {
    public:
        person(string name,int age)
        {
            this->m_name = name;
            this->m_age = age;
        }
        string m_name;
        int m_age;
    };
    
    template<class T>
    bool cmp(T &a,T &b)
    {
        if(a == b) return 1;
        else return 0;
    }
    
    //只有具体化才可以通用模板,不写这个person传进去是错的
    //具体化person版本
    template<> bool cmp(person &p1,person &p2)
    {
        if(p1.m_age == p2.m_age && p1.m_name == p2.m_name) return 1;
        else return 0;
    }
    
    void test()
    {
        int a = 10,b = 10;
        cout << cmp(a,b) << endl;
        person p1("aa",10);
        person p2("aa",10);
        //如果不利用具体化的模板,是不可以的下面这行,
        //只有具体化才可以通用模板
        cout << cmp(p1,p2) << endl;
        p1.m_age = 11;
        cout << cmp(p1,p2) << endl;
    }
    int main()
    {
        test();
        return 0;
    }
    

      

  • 相关阅读:
    27-Perl 进程管理
    26-Perl 包和模块
    25-Perl CGI编程
    YUM极速安装mariadb
    yum极速安装mysql5.7
    切换阿里yum镜像源
    mysql生成随机字符串函数
    Unable to locate value meta plugin of type (id)
    centos 挂载NTFS移动硬盘
    总有你要的编程书单(GitHub )
  • 原文地址:https://www.cnblogs.com/mch5201314/p/11674107.html
Copyright © 2011-2022 走看看