类模板与特化

设计一个类,它的数据成员的类型可能根据需求变化而变化,笨方法是每一个类型都单独写一个类出来,但是这些类除了改动一些类型,其它基本一样,重复的写是很繁琐的事情,而且有时你需要的类型是你新增的,难道要再写一遍吗?

C++提供了模板语法,下面简单举个例子:

template <class T>//  class 也可以写成typename
class complex
{
	private:
		T re,im;
	public:
		inline T& get_re()const{return re;}
		inline T& get)_im()const{return im;}
};

这样写完只有这么一份代码,当你写complex <double> a;
这时编译器就会生成一份将T替换成double的代码。
这种写法称之为泛化。但是为了满足某些特殊需求,C++还提供了特化的语法。比如,如果数据类型是bool型,我们都知道bool在计算机中是按位储存的,因此单独为其写一份,不仅效率高,而且节省空间。

下面我们就举个例子看看特化的语法:

 #include <iostream>
  using namespace std:
  template <class T>
  class Person
  {
         public:
                   Person()
                  {
                          cout<<"泛化" <<endl;
                  }
  };
template <>
 class Person<int>
  {
          public:
                  Person()
                  {
                          cout << "全特化" << endl;
                  }
  };
  template <class T>
  class Person <T*>
  {
          public:
                 Person()
                 {
                          cout << "偏特化" << endl;
                  }
  };
int main()
  {
         Person<char> a;
          Person<int> b;
          Person<char*> c;
          return 0;
 }

特化又分为全特化和偏特化,全特化顾名思义它的特化程度要更高,
具体到某一个数据类型,而偏特化特化程度低,因此它只限定了部分类型,比如第三个Person,它限制非指针类型,只有传进去的模板参数是指针类型,才会使用该模板。不仅有限制数据类型的偏特化,还有限制模板参数个数的偏特化,但都大同小异,就不举例子了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值