【C++ 继承】特例化、偏特化、全特化

1. 定义函数模板特例化:

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

template <typename T>
T Max(T t1, T t2)
{
    return (t1 > t2) ? t1 : t2;
}

template <>
const char *Max(const char *s1, const char *s2)
{
    return (strcmp(s1, s2) > 0) ? s1 : s2;
}

int main()
{
    // 隐式调用实例:int Max<int>(int,int)
    int i = Max(10, 5);

    // 显式调用特化版本:const char* Max<const char*>(const char*,const char*)
    const char *p = Max<const char *>("very", "good");
    cout << "i:" << i << endl;
    cout << "p:" << p << endl;
}

2. 定义类模板特例化

#include <iostream>
using namespace std;
 
namespace templateTest {
  template<typename T>  // 模版泛化
  class iterator_traits {
  public:
    iterator_traits() { cout << "模版泛化" << endl; }
    ~iterator_traits() {}
  };

  template<typename T> // 偏特化
  class iterator_traits<T*> {
  public:
    iterator_traits() { cout << "模版偏特化,特化常规指针" << endl; }
    ~iterator_traits() {};
  };

  template<typename T> //偏特化
  class iterator_traits<const T*> {
  public:
    iterator_traits() { cout << "模版偏特化,特化const指针" << endl; }
    ~iterator_traits() {}
  };

  template<> //全特化
  class iterator_traits<int> {
  public:
    iterator_traits() { cout << "模版全特化int类型" << endl; }
    ~iterator_traits() {}
  };
};
 
int main()
{
  templateTest::iterator_traits<int> t1;         //  模版全特化int类型
  templateTest::iterator_traits<float> t2;       //  模版泛化
  templateTest::iterator_traits<int*> t3;        //  模版偏特化,特化常规指针
  templateTest::iterator_traits<const int*> t4;  //  模版偏特化,特化const指针
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值