当前位置: 代码迷 >> 综合 >> boost:tuple解码
  详细解决方案

boost:tuple解码

热度:78   发布时间:2023-12-15 01:05:45.0
tuple想必人人都会用,究之实质,其实就是模板全特化及部分特化的又一种应用而已。简要的实现如下:


 template<typename T1 = void, typename T2 = void, typename T3 = void, typename T4 = void>
 struct Tuple
 {
  Tuple(){}
  Tuple(typename traits::type_traits<T1>::const_reference a,
   typename traits::type_traits<T2>::const_reference b,
   typename traits::type_traits<T3>::const_reference c,
   typename traits::type_traits<T4>::const_reference d)
   :a_(a),b_(b),c_(c),d_(d)
  {}

  T1 a_;
  T2 b_;
  T3 c_;
  T4 d_;
 };

 template<typename T1, typename T2, typename T3>
 struct Tuple<T1,T2,T3,void>
 {
  Tuple(){}
  Tuple(typename traits::type_traits<T1>::const_reference a,
   typename traits::type_traits<T2>::const_reference b,
   typename traits::type_traits<T3>::const_reference c)
   :a_(a),b_(b),c_(c)
  {}

  T1 a_;
  T2 b_;
  T3 c_;
 };

 template<typename T1, typename T2>
 struct Tuple<T1,T2,void,void>
 {
  Tuple(){}
  Tuple(typename traits::type_traits<T1>::const_reference a,
   typename traits::type_traits<T2>::const_reference b)
   :a_(a),b_(b)
  {}

  T1 a_;
  T2 b_;
 };

 template<typename T1>
 struct Tuple<T1,void,void,void>
 {
  Tuple(){}
  Tuple(typename traits::type_traits<T1>::const_reference a)
   :a_(a)
  {}

  T1 a_;
 };

 template<>
 struct Tuple<void,void,void,void>
 {
  Tuple(){}
 };