模版特化

最近在看STL源代码时候发现很多东西值得学习, 需要不断消化, 应用在平时项目中, 一个简单的模版萃取方法, 在STL里面应用也很广.

 

#include <iostream>

using namespace std;

template <class T>
struct Traits
{
  typedef T type_name;
};

template <class T> struct Traits<T *>
{
  typedef T type_name;
};

template <class T> struct Traits<const T *>
{
  typedef T type_name;
};

template <class T>
class Iterator
{
public:

  typedef typename Traits<T>::type_name type_name;

  Iterator(type_name * pointor) : m_pointor(pointor)
  {
  }

  type_name & operator* () const
  {
    return *m_pointor;
  }

private:
  type_name *m_pointor;
};

template <class T>
typename T::type_name testFunc(T itr)
{
  return *itr;
}

int main(int argc __attribute__((unused)), char *argv[] __attribute__((unused)))
{
  Iterator<const int *> itr(new int(10));
  cout << testFunc(itr) << endl;

  Iterator<int * > itr2(new int(11));
  cout << testFunc(itr2) << endl;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值