advance.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 103 行

HPP
103
字号
/*=============================================================================    Copyright (c) 2001-2006 Joel de Guzman    Distributed under 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)==============================================================================*/#if !defined(FUSION_ADVANCE_09172005_1149)#define FUSION_ADVANCE_09172005_1149#include <boost/mpl/int.hpp>#include <boost/mpl/if.hpp>#include <boost/mpl/eval_if.hpp>#include <boost/mpl/identity.hpp>#include <boost/fusion/iterator/next.hpp>#include <boost/fusion/iterator/prior.hpp>namespace boost { namespace fusion { namespace advance_detail{    // Default advance implementation, perform next(i)    // or prior(i) N times.    template <typename Iterator, int N>    struct forward;    template <typename Iterator, int N>    struct next_forward    {        typedef typename            forward<                typename result_of::next<Iterator>::type              , N-1            >::type        type;    };    template <typename Iterator, int N>    struct forward    {        typedef typename            mpl::eval_if_c<                (N == 0)              , mpl::identity<Iterator>              , next_forward<Iterator, N>            >::type        type;        static type const&        call(type const& i)        {            return i;        }        template <typename I>        static type        call(I const& i)        {            return call(fusion::next(i));        }    };    template <typename Iterator, int N>    struct backward;    template <typename Iterator, int N>    struct next_backward    {        typedef typename            backward<                typename result_of::prior<Iterator>::type              , N+1            >::type        type;    };    template <typename Iterator, int N>    struct backward    {        typedef typename            mpl::eval_if_c<                (N == 0)              , mpl::identity<Iterator>              , next_backward<Iterator, N>            >::type        type;        static type const&        call(type const& i)        {            return i;        }        template <typename I>        static type        call(I const& i)        {            return call(fusion::prior(i));        }    };}}}#endif

⌨️ 快捷键说明

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