C++ 类模板和函数模板:

1、类模板

#include <iostream>
using namespace std;
//-----------------------------通用类模板---------------------------
template<class T1,class T2>//通用模板
class Compare //在这里不能写类型
{
private:    
    T1 num1;
    T2 num2;
public:
    Compare();
};

template<class T1,class T2> //这里必须写
Compare<T1,T2>::Compare  ()
{
    cout << "通用模板" << endl;
}
//--------------------------类模板全特化------------------------
template<>   //类模板全特化
class Compare<char*,char*>    //在这里写上所需要的类型
{
private:    
    char* num1;
    char* num2;
public: 
    Compare();
};
//template<>   //全特化这行代码不能写!!!
Compare<char* ,char*>::Compare()
{
    cout  << "全特化" << endl;
}
//--------------------------类模板偏特化--------------------------
template<class T2>  //类模板偏特化
class Compare<float,T2>     //偏特化类型T1 特化为float类型
{
private:    
    float num1;
    T2 num2;
public:    
    Compare();
};
template<class T2>  //偏特化这里必须要写
Compare<float,T2>::Compare()
{
    cout << "偏特化"<< endl;
}
//-------------------------------测试---------------------------------
int main(int argc, char *argv[])
{
    Compare <int   ,int> p1;    //打印通用函数
    Compare <char*,char*> p2;   //打印全特化
    Compare <float,int> p3;     //打印偏特化
    return 0;
}

2、函数模板

#include <iostream>
#include<string.h>
using namespace std;

//--------------------------函数模板---------------------------------
template<class T1,class T2>
bool test(T1 t1, T2 t2)
{
    return t1 == t2;
}

//--------------------------模板全特化--------------------------------
template<>     //因为字符串比较不能通过直接相等来比较,的特化一下
bool test  <char*>  (char* t1,char* t2)    //标明特化类型
{
    return strcmp(t1,t2);
}
//----------------------------测试------------------------------------
int main(int argc, char *argv[])
{
    char str1[20] = "helle";
    char str2[20] = "hello";
    if(test(str1,str2) == 0){    //会去调用特化后的模板
        cout << "t1 == t2 " << endl;
    }else{
       cout <<  "t1 != t2 " << endl;
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值