设为首页 加入收藏

TOP

c++11 一个简易的tuple实现(一)
2014-03-10 12:52:42 来源: 作者: 【 】 浏览:138
Tags:11  一个 简易 tuple 实现

  实现一个简易版的c++11 tuple.

  我使用的编译器是gcc,codeblocks13.12自带的,哪个版本我不熟gcc也没去查。

  大致看了下他家的tuple实现,多继承,tuple之上还有2个辅助类,走的是类似loki中GenScatterHierarchy的路子。1092行代码,不是盖的…

  有些强迫症,不打算用多继承,虽然并不会实例化来,看着闹心。

  只考虑实现到POD类型的基本支持就行了,什么右值之类的我还没看到,就不搞了,仅供参考。

  个人觉得tuple保存POD类型值就足够了,泛滥就堕落了。

  gcc下出现一个reorder警告,不知道vs有没有。递归继承,构造函数带可变参数造成的。

  单继承版本确实比多继承版本美得多了,可变模板参数真是个好东西。

  //////////////////////////////////////////////////////////

  template<typename… TList> struct tuple;

  template<> struct tuple<> {};

  typedef tuple<> nulltuple;

  //////////////////////////////////////////////////////////

  template<typename T, typename… TList>

  struct tuple<T, TList…> : public tuple<TList…>

  {

  typedef T value_type;

  typedef tuple<TList…> base_type;

  tuple(T v, TList… tails):_value(v),base_type(tails…) {}

  const T& head() const { return this->_value; }

  T& head() { return this->_value; }

  protected:

  T _value;

  };

  template<typename T>

  struct tuple<T> : public nulltuple

  {

  typedef T value_type;

  typedef nulltuple base_type;

  tuple(T v):_value(v) {}

  const T& head() const { return this->_value; }

  T& head() { return this->_value; }

  protected:

  T _value;

  };

  //////////////////////////////////////////////////////////

  template<unsigned int N, typename… TList> struct tuple_at;

  template<unsigned int N, typename T, typename… TList>

  struct tuple_at< N, tuple<T, TList…> >

  {

  typedef typename tuple_at< N-1, tuple<TList…> >::value_type value_type;

  typedef typename tuple_at< N-1, tuple<TList…> >::tuple_type tuple_type;

  };

  template<typename T, typename… TList>

  struct tuple_at< 0, tuple<T, TList…> >

  {

  typedef T value_type;

  typedef tuple<T, TList…> tuple_type;

  };

  template<>

  struct tuple_at<0, nulltuple>

  {

  typedef nulltuple value_type;

  typedef nulltuple tuple_type;

  };

  //////////////////////////////////////////////////////////

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一个裸的KM算法实例详解 下一篇MFC如何修改BMP图片的大小

评论

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

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)