📄 composite.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_COMPOSITE_HPP#define PHOENIX_CORE_COMPOSITE_HPP#include <boost/spirit/home/phoenix/core/actor.hpp>#include <boost/spirit/home/phoenix/core/is_actor.hpp>#include <boost/fusion/include/vector.hpp>#include <boost/fusion/include/at.hpp>#include <boost/fusion/include/size.hpp>#include <boost/fusion/include/mpl.hpp>#include <boost/mpl/fold.hpp>#include <boost/mpl/bool.hpp>#include <boost/mpl/or.hpp>#if !defined(PHOENIX_COMPOSITE_LIMIT)# define PHOENIX_COMPOSITE_LIMIT PHOENIX_LIMIT#endifnamespace boost { namespace phoenix{ namespace detail { template <int N> struct composite_eval; struct compute_no_nullary { template <typename State, typename T> struct apply { typedef typename mpl::or_<typename T::no_nullary, State>::type type; }; }; } template <typename EvalPolicy, typename EvalTuple> struct composite : EvalTuple { typedef EvalTuple base_type; typedef composite<EvalPolicy, EvalTuple> self_type; typedef EvalPolicy eval_policy_type; typedef typename mpl::fold< EvalTuple , mpl::false_ , detail::compute_no_nullary >::type no_nullary; template <typename Env> struct result { typedef typename detail::composite_eval< fusion::result_of::size<base_type>::value>:: template result<self_type, Env>::type type; }; composite() : base_type() {} composite(base_type const& base) : base_type(base) {} template <typename U0> composite(U0& _0) : base_type(_0) {} template <typename U0, typename U1> composite(U0& _0, U1& _1) : base_type(_0, _1) {} template <typename Env> typename result<Env>::type eval(Env const& env) const { typedef typename result<Env>::type return_type; return detail:: composite_eval<fusion::result_of::size<base_type>::value>::template call<return_type>(*this, env); } // Bring in the rest of the constructors #include <boost/spirit/home/phoenix/core/detail/composite.hpp> }; // Bring in the detail::composite_eval<0..N> definitions #include <boost/spirit/home/phoenix/core/detail/composite_eval.hpp>}}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -