设为首页 加入收藏

TOP

C++类模板的三种特化类型(二)
2013-04-24 12:16:11 来源: 作者: 【 】 浏览:1119
Tags:模板 类型

 

  这就把IsEqual的参数限定为一种vector类型, 但具体是vector<int>还是vector<float>, 我们可以不关心, 因为对于这两种类型,我们的处理方式是一样的,我们可以把这种方式称为"半特化".

  当然, 我们可以将其"半特化"为任何我们自定义的模板类类型:

  // specialize for any template class type

  template <class T1>

  struct SpecializedType

  {

  T1 x1;

  T1 x2;

  };

  template <class T>

  class Compare<SpecializedType<T> >

  {

  public:

  static bool IsEqual(const SpecializedType<T>& lh, const SpecializedType<T>& rh)

  {

  return Compare<T>::IsEqual(lh.x1 + lh.x2, rh.x1 + rh.x2);

  }

  };

  这就是三种类型的模板特化, 我们可以这么使用这个Compare类:

  // int

  int i1 = 10;

  int i2 = 10;

  bool r1 = Compare<int>::IsEqual(i1, i2);

  // float

  float f1 = 10;

  float f2 = 10;

  bool r2 = Compare<float>::IsEqual(f1, f2);

  // double

  double d1 = 10;

  double d2 = 10;

  bool r3 = Compare<double>::IsEqual(d1, d2);

  // pointer

  int* p1 = &i1;

  int* p2 = &i2;

  bool r4 = Compare<int*>::IsEqual(p1, p2);

  // vector<T>

  vector<int> v1;

  v1.push_back(1);

  v1.push_back(2);

  vector<int> v2;

  v2.push_back(1);

  v2.push_back(2);

  bool r5 = Compare<vector<int> >::IsEqual(v1, v2);

  // custom template class

  SpecializedType<float> s1 = {10.1f,10.2f};

  SpecializedType<float> s2 = {10.3f,10.0f};

  bool r6 = Compare<SpecializedType<float> >::IsEqual(s1, s2);

      

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇中国剩余定理 下一篇模版的特化与偏特化

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: