tuple_body.hpp

来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 87 行

HPP
87
字号
// Copyright David Abrahams 2003. Use, modification and distribution is// subject to the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)// !!No include guards, intentionally!!#define N BOOST_PP_ITERATION()template <BOOST_PP_ENUM_PARAMS(N, typename T)>struct BOOST_PP_CAT(tuple, N);template <BOOST_PP_ENUM_PARAMS(N, typename T)>struct BOOST_PP_CAT(tuple_data, N)    : sequence_base<BOOST_PP_CAT(tuple, N)        <BOOST_PP_ENUM_PARAMS(N, T)> >{    typedef mpl::BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> types;    typedef tuple_tag tag;    typedef mpl::int_<N> size;    typedef BOOST_PP_CAT(tuple_data, N) identity_type;    BOOST_PP_CAT(tuple_data, N)()        : BOOST_PP_ENUM(N, FUSION_TUPLE_MEMBER_DEFAULT_INIT, _) {}    BOOST_PP_CAT(tuple_data, N)(BOOST_PP_ENUM_BINARY_PARAMS(        N, typename detail::call_param<T, >::type _))        : BOOST_PP_ENUM(N, FUSION_TUPLE_MEMBER_INIT, _) {}    template <BOOST_PP_ENUM_PARAMS(N, typename A)>    BOOST_PP_CAT(tuple_data, N)(detail::disambiguate_as_iterator,        BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _))        : BOOST_PP_ENUM(N, FUSION_TUPLE_MEMBER_ITERATOR_INIT, _) {}    BOOST_PP_REPEAT(N, FUSION_TUPLE_MEMBER, _)};template <BOOST_PP_ENUM_PARAMS(N, typename T)>struct BOOST_PP_CAT(tuple, N)    : BOOST_PP_CAT(tuple_data, N)<BOOST_PP_ENUM_PARAMS(N, T)>{    typedef BOOST_PP_CAT(tuple_data, N)<        BOOST_PP_ENUM_PARAMS(N, T)> base_type;    BOOST_PP_CAT(tuple, N)()        : base_type()    {}    BOOST_PP_CAT(tuple, N)(BOOST_PP_ENUM_BINARY_PARAMS(        N, typename detail::call_param<T, >::type _))        : base_type(BOOST_PP_ENUM_PARAMS(N, _))    {}    template <typename X>    explicit BOOST_PP_CAT(tuple, N)(X const& x)        : base_type(construct(x, &x))    {}    template <BOOST_PP_ENUM_PARAMS(N, typename U)>    BOOST_PP_CAT(tuple, N)&    operator=(BOOST_PP_CAT(tuple, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& t)    {        BOOST_PP_REPEAT(N, FUSION_TUPLE_MEMBER_ASSIGN, _)        return *this;    }private:    template <typename i0_type>    static base_type    construct(i0_type const& i0, void const*)    {        FUSION_TUPLE_CONSTRUCT_FROM_ITER(N)        return base_type(            detail::disambiguate_as_iterator(), BOOST_PP_ENUM_PARAMS(N, i));    }    template <typename Tuple>    static base_type    construct(Tuple const& t, sequence_root const*)    {        return base_type(BOOST_PP_ENUM_PARAMS(N, t.m));    }};#undef N

⌨️ 快捷键说明

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