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

📄 compose.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
/*=============================================================================    Copyright (c) 2001-2007 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)==============================================================================*/#ifndef PHOENIX_CORE_COMPOSE_HPP#define PHOENIX_CORE_COMPOSE_HPP#include <boost/mpl/eval_if.hpp>#include <boost/mpl/identity.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/preprocessor/repetition/enum.hpp>#include <boost/preprocessor/repetition/enum_params.hpp>#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>#include <boost/spirit/home/phoenix/core/composite.hpp>#include <boost/spirit/home/phoenix/core/value.hpp>#include <boost/spirit/home/phoenix/core/as_actor.hpp>#define PHOENIX_AS_ACTOR(z, n, data)                                            \    typename mpl::eval_if<                                                      \        is_same<BOOST_PP_CAT(T, n), fusion::void_>                              \      , mpl::identity<fusion::void_>                                            \      , as_actor_base<BOOST_PP_CAT(T, n)>                                       \    >::typenamespace boost { namespace phoenix{///////////////////////////////////////////////////////////////////////////////////  as_composite<EvalPolicy, T0,... TN> metafunction////      Create a composite given an EvalPolicy and types T0..TN.//      The types are converted to an actor through the as_actor//      metafunction (see as_actor.hpp)./////////////////////////////////////////////////////////////////////////////////    template <        typename EvalPolicy      , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(            PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>    struct as_composite    {        typedef composite<            EvalPolicy          , fusion::vector<                BOOST_PP_ENUM(PHOENIX_COMPOSITE_LIMIT, PHOENIX_AS_ACTOR, _)>        >        type;    };///////////////////////////////////////////////////////////////////////////////////  compose functions////      Usage:////          compose<EvalPolicy>(_0, _1,... _N)////      Returns a composite given an EvalPolicy and arguments _0.._N. //      The arguments are converted to an actor through the as_actor//      metafunction (see as_actor.hpp)./////////////////////////////////////////////////////////////////////////////////    template <typename EvalPolicy>    inline actor<typename as_composite<EvalPolicy>::type>    compose()    {        return actor<typename as_composite<EvalPolicy>::type>();    }    template <typename EvalPolicy, typename T0>    inline actor<typename as_composite<EvalPolicy, T0>::type>    compose(T0 const& _0)    {        return actor<typename as_composite<EvalPolicy, T0>::type>(            as_actor<T0>::convert(_0)        );    }    template <typename EvalPolicy, typename T0, typename T1>    inline actor<typename as_composite<EvalPolicy, T0, T1>::type>    compose(T0 const& _0, T1 const& _1)    {        return actor<typename as_composite<EvalPolicy, T0, T1>::type>(            as_actor<T0>::convert(_0)          , as_actor<T1>::convert(_1)        );    }    //  Bring in the the rest of the compose overloads    #include <boost/spirit/home/phoenix/core/detail/compose.hpp>///////////////////////////////////////////////////////////////////////////////////  re_curry<EvalPolicy, T0,...TN>////      returns the result of re currying T0..TN using EvalPolicy./////////////////////////////////////////////////////////////////////////////////    template <        typename EvalPolicy      , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(            PHOENIX_COMPOSITE_LIMIT, typename T, fusion::void_)>    struct re_curry    {        typedef actor<            typename as_composite<                EvalPolicy              , BOOST_PP_ENUM_PARAMS(PHOENIX_COMPOSITE_LIMIT, T)>::type            >        type;    };}}#undef PHOENIX_AS_ACTOR#endif

⌨️ 快捷键说明

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