tuples.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 1,330 行 · 第 1/3 页
HPP
1,330 行
// the Nth element in a tuple. See tuple operator[]. Some// predefined names are provided in sub-namespace// tuple_index_names./////////////////////////////////////////////////////////////////////////////////template <int N>struct tuple_index {};//////////////////////////////////namespace tuple_index_names { tuple_index<0> const _1 = tuple_index<0>(); tuple_index<1> const _2 = tuple_index<1>(); tuple_index<2> const _3 = tuple_index<2>();#if PHOENIX_LIMIT > 3 tuple_index<3> const _4 = tuple_index<3>(); tuple_index<4> const _5 = tuple_index<4>(); tuple_index<5> const _6 = tuple_index<5>();#if PHOENIX_LIMIT > 6 tuple_index<6> const _7 = tuple_index<6>(); tuple_index<7> const _8 = tuple_index<7>(); tuple_index<8> const _9 = tuple_index<8>();#if PHOENIX_LIMIT > 9 tuple_index<9> const _10 = tuple_index<9>(); tuple_index<10> const _11 = tuple_index<10>(); tuple_index<11> const _12 = tuple_index<11>();#if PHOENIX_LIMIT > 12 tuple_index<12> const _13 = tuple_index<12>(); tuple_index<13> const _14 = tuple_index<13>(); tuple_index<14> const _15 = tuple_index<14>();#endif#endif#endif#endif}/////////////////////////////////////////////////////////////////////////////////// tuple_common class/////////////////////////////////////////////////////////////////////////////////template <typename DerivedT>struct tuple_base { typedef nil_t a_type; typedef nil_t b_type; typedef nil_t c_type;#if PHOENIX_LIMIT > 3 typedef nil_t d_type; typedef nil_t e_type; typedef nil_t f_type;#if PHOENIX_LIMIT > 6 typedef nil_t g_type; typedef nil_t h_type; typedef nil_t i_type;#if PHOENIX_LIMIT > 9 typedef nil_t j_type; typedef nil_t k_type; typedef nil_t l_type;#if PHOENIX_LIMIT > 12 typedef nil_t m_type; typedef nil_t n_type; typedef nil_t o_type;#endif#endif#endif#endif template <int N> typename tuple_element<N, DerivedT>::crtype operator[](tuple_index<N>) const { return tuple_element<N, DerivedT> ::get(*static_cast<DerivedT const*>(this)); } template <int N> typename tuple_element<N, DerivedT>::rtype operator[](tuple_index<N>) { return tuple_element<N, DerivedT> ::get(*static_cast<DerivedT*>(this)); }};/////////////////////////////////////////////////////////////////////////////////// tuple <0 member> class/////////////////////////////////////////////////////////////////////////////////template <>struct tuple<>: public tuple_base<tuple<> > { BOOST_STATIC_CONSTANT(int, length = 0);};/////////////////////////////////////////////////////////////////////////////////// tuple <1 member> class/////////////////////////////////////////////////////////////////////////////////template <typename A>struct tuple<A, nil_t, nil_t,#if PHOENIX_LIMIT > 3 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif#endif#endif nil_t // Unused>: public tuple_base<tuple<A> > { BOOST_STATIC_CONSTANT(int, length = 1); typedef A a_type; tuple() {} tuple( typename call_traits<A>::param_type a_ ): a(a_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a;};/////////////////////////////////////////////////////////////////////////////////// tuple <2 member> class/////////////////////////////////////////////////////////////////////////////////template <typename A, typename B>struct tuple<A, B, nil_t,#if PHOENIX_LIMIT > 3 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B> > { BOOST_STATIC_CONSTANT(int, length = 2); typedef A a_type; typedef B b_type; tuple() {} tuple( typename call_traits<A>::param_type a_, typename call_traits<B>::param_type b_ ): a(a_), b(b_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b;};/////////////////////////////////////////////////////////////////////////////////// tuple <3 member> class/////////////////////////////////////////////////////////////////////////////////template <typename A, typename B, typename C>struct tuple<A, B, C,#if PHOENIX_LIMIT > 3 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B, C> > { BOOST_STATIC_CONSTANT(int, length = 3); typedef A a_type; typedef B b_type; typedef C c_type; tuple() {} tuple( typename call_traits<A>::param_type a_, typename call_traits<B>::param_type b_, typename call_traits<C>::param_type c_ ): a(a_), b(b_), c(c_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c;};#if PHOENIX_LIMIT > 3/////////////////////////////////////////////////////////////////////////////////// tuple <4 member> class/////////////////////////////////////////////////////////////////////////////////template <typename A, typename B, typename C, typename D>struct tuple<A, B, C, D, nil_t, nil_t,#if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B, C, D> > { BOOST_STATIC_CONSTANT(int, length = 4); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; tuple() {} tuple( typename call_traits<A>::param_type a_, typename call_traits<B>::param_type b_, typename call_traits<C>::param_type c_, typename call_traits<D>::param_type d_ ): a(a_), b(b_), c(c_), d(d_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d;};/////////////////////////////////////////////////////////////////////////////////// tuple <5 member> class/////////////////////////////////////////////////////////////////////////////////template <typename A, typename B, typename C, typename D, typename E>struct tuple<A, B, C, D, E, nil_t,#if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B, C, D, E> > { BOOST_STATIC_CONSTANT(int, length = 5); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; tuple() {} tuple( typename call_traits<A>::param_type a_, typename call_traits<B>::param_type b_, typename call_traits<C>::param_type c_, typename call_traits<D>::param_type d_, typename call_traits<E>::param_type e_ ): a(a_), b(b_), c(c_), d(d_), e(e_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e;};/////////////////////////////////////////////////////////////////////////////////// tuple <6 member> class/////////////////////////////////////////////////////////////////////////////////template < typename A, typename B, typename C, typename D, typename E, typename F>struct tuple<A, B, C, D, E, F,#if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B, C, D, E, F> > { BOOST_STATIC_CONSTANT(int, length = 6); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; tuple() {} tuple( typename call_traits<A>::param_type a_, typename call_traits<B>::param_type b_, typename call_traits<C>::param_type c_, typename call_traits<D>::param_type d_, typename call_traits<E>::param_type e_, typename call_traits<F>::param_type f_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f;};#if PHOENIX_LIMIT > 6/////////////////////////////////////////////////////////////////////////////////// tuple <7 member> class/////////////////////////////////////////////////////////////////////////////////template < typename A, typename B, typename C, typename D, typename E, typename F, typename G>struct tuple<A, B, C, D, E, F, G, nil_t, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B, C, D, E, F, G> > { BOOST_STATIC_CONSTANT(int, length = 7); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; tuple() {} tuple( typename call_traits<A>::param_type a_, typename call_traits<B>::param_type b_, typename call_traits<C>::param_type c_, typename call_traits<D>::param_type d_, typename call_traits<E>::param_type e_, typename call_traits<F>::param_type f_, typename call_traits<G>::param_type g_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_) {} template <typename TupleT> tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g;};/////////////////////////////////////////////////////////////////////////////////// tuple <8 member> class/////////////////////////////////////////////////////////////////////////////////template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H>struct tuple<A, B, C, D, E, F, G, H, nil_t,#if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t,#endif#endif nil_t // Unused>: public tuple_base<tuple<A, B, C, D, E, F, G, H> > { BOOST_STATIC_CONSTANT(int, length = 8); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?