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

📄 make.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
📖 第 1 页 / 共 2 页
字号:
            struct make : proto::callable            {                template<typename Sig>                struct result;                template<typename This, typename Expr, typename State, typename Visitor>                struct result<This(Expr, State, Visitor)>                {                    typedef typename detail::make_if_<Object, Expr, State, Visitor>::type type;                };                /// \param expr The current expression                /// \param state The current state                /// \param visitor An arbitrary visitor                /// \return <tt>result\<void(Expr, State, Visitor)\>::::type()</tt>                template<typename Expr, typename State, typename Visitor>                typename result<void(Expr, State, Visitor)>::type                operator ()(Expr const &, State const &, Visitor &) const                {                    typedef typename result<void(Expr, State, Visitor)>::type result_type;                    return result_type();                }            };            #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/transform/make.hpp>))            #include BOOST_PP_ITERATE()        }        /// INTERNAL ONLY        ///        template<typename Object>        struct is_callable<transform::make<Object> >          : mpl::true_        {};    }}    #endif#else    #define N BOOST_PP_ITERATION()        namespace detail        {            #if N > 0            template<typename T BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>            struct nested_type_if<                T              , typelist<BOOST_PP_ENUM_PARAMS(N, A)>              , typename typelist<                    BOOST_PP_ENUM_BINARY_PARAMS(N, typename A, ::not_applied_ BOOST_PP_INTERCEPT)                >::type            >            {                typedef T type;                typedef void not_applied_;            };            template<                template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class R                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)              , typename Expr, typename State, typename Visitor            >            struct make_<R<BOOST_PP_ENUM_PARAMS(N, A)>, Expr, State, Visitor                BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(N)            >              : nested_type_if<                    #define TMP0(Z, M, DATA) make_if_<BOOST_PP_CAT(A, M), Expr, State, Visitor>                    #define TMP1(Z, M, DATA) typename TMP0(Z, M, DATA) ::type                    R<BOOST_PP_ENUM(N, TMP1, ~)>                  , typelist<BOOST_PP_ENUM(N, TMP0, ~) >                    #undef TMP0                    #undef TMP1                >            {};            #endif            template<                typename R                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)              , typename Expr, typename State, typename Visitor            >            struct make_if_<R(BOOST_PP_ENUM_PARAMS(N, A)), Expr, State, Visitor, false>            {                typedef typename when<_, R(BOOST_PP_ENUM_PARAMS(N, A))>::template result<void(Expr, State, Visitor)>::type type;            };            template<                typename R                BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)              , typename Expr, typename State, typename Visitor            >            struct make_if_<R(*)(BOOST_PP_ENUM_PARAMS(N, A)), Expr, State, Visitor, false>            {                typedef typename when<_, R(BOOST_PP_ENUM_PARAMS(N, A))>::template result<void(Expr, State, Visitor)>::type type;            };            template<typename T, typename A>            struct construct_<proto::expr<T, A, N>, true>            {                typedef proto::expr<T, A, N> result_type;                template<BOOST_PP_ENUM_PARAMS(BOOST_PP_MAX(N, 1), typename A)>                result_type operator ()(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_MAX(N, 1), A, &a)) const                {                    return result_type::make(BOOST_PP_ENUM_PARAMS(BOOST_PP_MAX(N, 1), a));                }            };        }        /// \brief A PrimitiveTransform which computes a type by evaluating any        /// nested transforms and then constructs an object of that type with the        /// current expression, state and visitor, transformed according        /// to \c A0 through \c AN.        template<typename Object BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>        struct make<Object(BOOST_PP_ENUM_PARAMS(N, A))> : proto::callable        {            template<typename Sig>            struct result;            template<typename This, typename Expr, typename State, typename Visitor>            struct result<This(Expr, State, Visitor)>            {                /// \brief <tt>make\<Object\>::::result\<void(Expr, State, Visitor)\>::::type</tt>                typedef typename detail::make_if_<Object, Expr, State, Visitor>::type type;            };            /// Let \c ax be <tt>when\<_, Ax\>()(expr, state, visitor)</tt>            /// for each \c x in <tt>[0,N]</tt>.            /// Let \c T be <tt>result\<void(Expr, State, Visitor)\>::::type</tt>.            /// Return <tt>T(a0, a1,... aN)</tt>.            ///            /// \param expr The current expression            /// \param state The current state            /// \param visitor An arbitrary visitor            template<typename Expr, typename State, typename Visitor>            typename result<void(Expr, State, Visitor)>::type            operator ()(Expr const &expr, State const &state, Visitor &visitor) const            {                typedef typename result<void(Expr, State, Visitor)>::type result_type;                proto::detail::ignore_unused(expr);                proto::detail::ignore_unused(state);                proto::detail::ignore_unused(visitor);                return detail::construct<result_type>(                    #define TMP(Z, M, DATA) detail::as_lvalue(when<_, BOOST_PP_CAT(A, M)>()(expr, state, visitor))                    BOOST_PP_ENUM(N, TMP, DATA)                    #undef TMP                );            }        };        #if BOOST_WORKAROUND(__GNUC__, == 3)        // work around GCC bug        template<typename Tag, typename Args, long Arity BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>        struct make<proto::expr<Tag, Args, Arity>(BOOST_PP_ENUM_PARAMS(N, A))>          : proto::callable        {            template<typename Sig>            struct result;            template<typename This, typename Expr, typename State, typename Visitor>            struct result<This(Expr, State, Visitor)>            {                typedef proto::expr<Tag, Args, Arity> type;            };            template<typename Expr, typename State, typename Visitor>            proto::expr<Tag, Args, Arity> operator ()(Expr const &expr, State const &state, Visitor &visitor) const            {                return proto::expr<Tag, Args, Arity>::make(                    #define TMP(Z, M, DATA) detail::as_lvalue(when<_, BOOST_PP_CAT(A, M)>()(expr, state, visitor))                    BOOST_PP_ENUM(N, TMP, DATA)                    #undef TMP                );            }        };        #endif    #undef N#endif

⌨️ 快捷键说明

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