模板的特化(特化和偏特化)

模板特化可以分为全特化和偏特化

特化可以为类增加成员函数或成员变量

模板特化有三种类型,一是特化为绝对类型,二是特化为引用、指针类型,三是特化为另外一个模板类

#include <iostream>

#include <cstring>

#include <string>

using namespace std;

 

template <class T>

T maxR(T t1,T t2)

{

    return t1;

}

template<>

const char* maxR<const char*> (const char* t1,const char* t2)

{

    return (strcmp(t1,t2)<0) ?t2: t1;

}

template<class CT>

class MyClass

{

public:

    MyClass()

    {

 

    }

    CT show(CT val)

    {

       cout<<"Class did a good job!"<<val<<endl;

       return val;

    } 

};

template<>

class MyClass<int>

{

public:

    MyClass()

    {

 

    }

    int show(int val)

    {

       cout<<"Special Class did a good job!"<<val<<endl;

       return val;

    } 

 

};

 

template <typename T1,class T2>

class MyPTClass

{

public:

    T1 show(T2 val)

    {

      T1 hi;

      return hi;

    }

 

    T1 T1Show(T1 t1)

    {

      cout<<""this is from t1<<t1<<endl;

      return t1;

    }

    T2 T2Show(T2 t2)

    {

       cout<<"This is from t2"<<t2<<endl;

       return t2;

    }

};

template<class T2>

class MyPTClass<string,T2>

{

public:

    string show(T2 val)

    {

       string hi="This is from PTclass";

       cout<<hi<<val<<endl;

       return hi;

    }

    T2 T2Show(T2 t2)

    {

       cout<<"This is from t2"<<t2<<endl;

       return t2;

    }

 

};

int main()

{

   const char * str1="Good";

   const char * str2="bad";

   int a=5,b=12;

   cout<<maxR(a,b)<<endl;

   cout<<maxR(str1,str2)<<endl;

  MyClass<int> obj;

  obj.show(59);

 

  MyClass<string> obj2;

  obj2.show("what the fuck?");

 

MyPTClass<string,float> PTobj;

PTobj.show(1230);

PTobj.T2Show(3.1415f);

    return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值