模版特化

本文介绍了一种在STL中广泛使用的简单模板萃取方法,并通过示例展示了如何使用Traits结构来处理不同类型的指针,进而实现泛型迭代器和函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值