⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tuple_basic_no_partial_spec.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
📖 第 1 页 / 共 2 页
字号:
      {        return get_class<N-1>::get(t.tail);      }      template<typename Head, typename Tail>      static inline      typename detail::element_const_ref<N, cons<Head, Tail> >::RET      get(const cons<Head, Tail>& t)      {        return get_class<N-1>::get(t.tail);      }    };    template<>    struct get_class<0>    {      template<typename Head, typename Tail>      static inline      typename add_reference<Head>::type      get(cons<Head, Tail>& t)      {        return t.head;      }      template<typename Head, typename Tail>      static inline      typename add_reference<const Head>::type      get(const cons<Head, Tail>& t)      {        return t.head;      }    };    } // namespace detail    // tuple class    template<      typename T1,      typename T2,      typename T3,      typename T4,      typename T5,      typename T6,      typename T7,      typename T8,      typename T9,      typename T10    >    class tuple :      public detail::map_tuple_to_cons<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::cons1    {    private:      typedef detail::map_tuple_to_cons<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> mapped_tuple;      typedef typename mapped_tuple::cons10 cons10;      typedef typename mapped_tuple::cons9 cons9;      typedef typename mapped_tuple::cons8 cons8;      typedef typename mapped_tuple::cons7 cons7;      typedef typename mapped_tuple::cons6 cons6;      typedef typename mapped_tuple::cons5 cons5;      typedef typename mapped_tuple::cons4 cons4;      typedef typename mapped_tuple::cons3 cons3;      typedef typename mapped_tuple::cons2 cons2;      typedef typename mapped_tuple::cons1 cons1;      typedef typename detail::add_const_reference<T1>::type t1_cref;      typedef typename detail::add_const_reference<T2>::type t2_cref;      typedef typename detail::add_const_reference<T3>::type t3_cref;      typedef typename detail::add_const_reference<T4>::type t4_cref;      typedef typename detail::add_const_reference<T5>::type t5_cref;      typedef typename detail::add_const_reference<T6>::type t6_cref;      typedef typename detail::add_const_reference<T7>::type t7_cref;      typedef typename detail::add_const_reference<T8>::type t8_cref;      typedef typename detail::add_const_reference<T9>::type t9_cref;      typedef typename detail::add_const_reference<T10>::type t10_cref;    public:      typedef cons1 inherited;      typedef tuple self_type;      tuple() : cons1(T1(), cons2(T2(), cons3(T3(), cons4(T4(), cons5(T5(), cons6(T6(),cons7(T7(),cons8(T8(),cons9(T9(),cons10(T10()))))))))))        {}      tuple(          t1_cref t1,          t2_cref t2,          t3_cref t3 = T3(),          t4_cref t4 = T4(),          t5_cref t5 = T5(),          t6_cref t6 = T6(),          t7_cref t7 = T7(),          t8_cref t8 = T8(),          t9_cref t9 = T9(),          t10_cref t10 = T10()      ) :        cons1(t1, cons2(t2, cons3(t3, cons4(t4, cons5(t5, cons6(t6,cons7(t7,cons8(t8,cons9(t9,cons10(t10))))))))))      {      }      explicit tuple(t1_cref t1)        : cons1(t1, cons2(T2(), cons3(T3(), cons4(T4(), cons5(T5(), cons6(T6(),cons7(T7(),cons8(T8(),cons9(T9(),cons10(T10()))))))))))      {}      template<typename Head, typename Tail>      tuple(const cons<Head, Tail>& other) :        cons1(other.head, other.tail)      {      }      template<typename First, typename Second>      self_type& operator=(const std::pair<First, Second>& other)      {        this->head = other.first;        this->tail.head = other.second;        return *this;      }      template<typename Head, typename Tail>      self_type& operator=(const cons<Head, Tail>& other)      {        this->head = other.head;        this->tail = other.tail;        return *this;      }    };    namespace detail {      template<int N> struct workaround_holder {};    } // namespace detail    template<int N, typename Head, typename Tail>    typename detail::element_ref<N, cons<Head, Tail> >::RET    get(cons<Head, Tail>& t, detail::workaround_holder<N>* = 0)    {      return detail::get_class<N>::get(t);    }    template<int N, typename Head, typename Tail>    typename detail::element_const_ref<N, cons<Head, Tail> >::RET    get(const cons<Head, Tail>& t, detail::workaround_holder<N>* = 0)    {      return detail::get_class<N>::get(t);    }    // Make a tuple    template<typename T1>    inline    tuple<T1>    make_tuple(const T1& t1)    {      return tuple<T1>(t1);    }    // Make a tuple    template<typename T1, typename T2>    inline    tuple<T1, T2>    make_tuple(const T1& t1, const T2& t2)    {      return tuple<T1, T2>(t1, t2);    }    // Make a tuple    template<typename T1, typename T2, typename T3>    inline    tuple<T1, T2, T3>    make_tuple(const T1& t1, const T2& t2, const T3& t3)    {      return tuple<T1, T2, T3>(t1, t2, t3);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4>    inline    tuple<T1, T2, T3, T4>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4)    {      return tuple<T1, T2, T3, T4>(t1, t2, t3, t4);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5>    inline    tuple<T1, T2, T3, T4, T5>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5)    {      return tuple<T1, T2, T3, T4, T5>(t1, t2, t3, t4, t5);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>    inline    tuple<T1, T2, T3, T4, T5, T6>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6)    {      return tuple<T1, T2, T3, T4, T5, T6>(t1, t2, t3, t4, t5, t6);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>    inline    tuple<T1, T2, T3, T4, T5, T6, T7>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7)    {      return tuple<T1, T2, T3, T4, T5, T6, T7>(t1, t2, t3, t4, t5, t6, t7);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>    inline    tuple<T1, T2, T3, T4, T5, T6, T7, T8>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8)    {      return tuple<T1, T2, T3, T4, T5, T6, T7, T8>(t1, t2, t3, t4, t5, t6, t7, t8);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>    inline    tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9)    {      return tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>(t1, t2, t3, t4, t5, t6, t7, t8, t9);    }    // Make a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>    inline    tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>    make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10)    {      return tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);    }    // Tie variables into a tuple    template<typename T1>    inline    tuple<detail::assign_to_pointee<T1> >    tie(T1& t1)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1));    }    // Tie variables into a tuple    template<typename T1, typename T2>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2> >    tie(T1& t1, T2& t2)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3> >    tie(T1& t1, T2& t2, T3& t3)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4> >    tie(T1& t1, T2& t2, T3& t3, T4& t4)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4>,      detail::assign_to_pointee<T5> >    tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4),                        detail::assign_to_pointee<T5>(&t5));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4>,      detail::assign_to_pointee<T5>,      detail::assign_to_pointee<T6> >    tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4),                        detail::assign_to_pointee<T5>(&t5),                        detail::assign_to_pointee<T6>(&t6));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4>,      detail::assign_to_pointee<T5>,      detail::assign_to_pointee<T6>,      detail::assign_to_pointee<T7> >    tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4),                        detail::assign_to_pointee<T5>(&t5),                        detail::assign_to_pointee<T6>(&t6),                        detail::assign_to_pointee<T7>(&t7));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4>,      detail::assign_to_pointee<T5>,      detail::assign_to_pointee<T6>,      detail::assign_to_pointee<T7>,      detail::assign_to_pointee<T8> >    tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4),                        detail::assign_to_pointee<T5>(&t5),                        detail::assign_to_pointee<T6>(&t6),                        detail::assign_to_pointee<T7>(&t7),                        detail::assign_to_pointee<T8>(&t8));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4>,      detail::assign_to_pointee<T5>,      detail::assign_to_pointee<T6>,      detail::assign_to_pointee<T7>,      detail::assign_to_pointee<T8>,      detail::assign_to_pointee<T9> >    tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8, T9 &t9)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4),                        detail::assign_to_pointee<T5>(&t5),                        detail::assign_to_pointee<T6>(&t6),                        detail::assign_to_pointee<T7>(&t7),                        detail::assign_to_pointee<T8>(&t8),                        detail::assign_to_pointee<T9>(&t9));    }    // Tie variables into a tuple    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>    inline    tuple<detail::assign_to_pointee<T1>,      detail::assign_to_pointee<T2>,      detail::assign_to_pointee<T3>,      detail::assign_to_pointee<T4>,      detail::assign_to_pointee<T5>,      detail::assign_to_pointee<T6>,      detail::assign_to_pointee<T7>,      detail::assign_to_pointee<T8>,      detail::assign_to_pointee<T9>,      detail::assign_to_pointee<T10> >    tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8, T9 &t9, T10 &t10)    {      return make_tuple(detail::assign_to_pointee<T1>(&t1),                        detail::assign_to_pointee<T2>(&t2),                        detail::assign_to_pointee<T3>(&t3),                        detail::assign_to_pointee<T4>(&t4),                        detail::assign_to_pointee<T5>(&t5),                        detail::assign_to_pointee<T6>(&t6),                        detail::assign_to_pointee<T7>(&t7),                        detail::assign_to_pointee<T8>(&t8),                        detail::assign_to_pointee<T9>(&t9),                        detail::assign_to_pointee<T10>(&t10));    }    // "ignore" allows tuple positions to be ignored when using "tie".detail::swallow_assign const ignore = detail::swallow_assign();} // namespace tuples} // namespace boost#endif // BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -