size_s.hpp

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

HPP
58
字号
/*=============================================================================    Copyright (c) 2006 Eric Niebler    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_SIZE_S_08112006_1141)#define FUSION_SIZE_S_08112006_1141#include <boost/mpl/plus.hpp>#include <boost/mpl/size_t.hpp>#include <boost/type_traits/remove_reference.hpp>#include <boost/fusion/algorithm/iteration/fold.hpp>#include <boost/fusion/support/ext_/is_segmented.hpp>#include <boost/fusion/sequence/intrinsic/ext_/segments.hpp>namespace boost { namespace fusion{    ///////////////////////////////////////////////////////////////////////////    // calculates the size of any segmented data structure.    template<typename Sequence, bool IsSegmented = traits::is_segmented<Sequence>::value>    struct segmented_size;    namespace detail    {        struct size_plus        {            template<typename Sig>            struct result;            template<typename This, typename Seq, typename State>            struct result<This(Seq, State)>              : mpl::plus<                    segmented_size<typename remove_reference<Seq>::type>                  , typename remove_reference<State>::type                >            {};        };    }    ///////////////////////////////////////////////////////////////////////////    template<typename Sequence, bool IsSegmented>    struct segmented_size      : result_of::fold<            typename result_of::segments<Sequence>::type          , mpl::size_t<0>          , detail::size_plus        >::type    {};    template<typename Sequence>    struct segmented_size<Sequence, false>      : result_of::size<Sequence>    {};}}#endif

⌨️ 快捷键说明

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