impl.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 191 行
HPP
191 行
////////////////////////////////////////////////////////////////////////////////// \file impl.hpp/// Contains definition of transform<> and transform_impl<> helpers.//// Copyright 2008 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)#ifndef BOOST_PROTO_TRANSFORM_IMPL_HPP_EAN_04_03_2008#define BOOST_PROTO_TRANSFORM_IMPL_HPP_EAN_04_03_2008#include <boost/proto/detail/prefix.hpp>#include <boost/proto/proto_fwd.hpp>#include <boost/proto/detail/suffix.hpp>namespace boost { namespace proto{ template<typename PrimitiveTransform, typename Expr, typename State = int, typename Data = int> struct apply_transform : PrimitiveTransform::template impl<Expr, State, Data> {}; struct transform_base { BOOST_PROTO_CALLABLE() BOOST_PROTO_TRANSFORM() }; struct empty_base {}; template< typename PrimitiveTransform , typename Base BOOST_PROTO_WHEN_BUILDING_DOCS(= transform_base) > struct transform : Base { typedef PrimitiveTransform transform_type; template<typename Sig> struct result; template<typename This, typename Expr> struct result<This(Expr)> { typedef typename PrimitiveTransform::template impl<Expr, int, int>::result_type type; }; template<typename This, typename Expr, typename State> struct result<This(Expr, State)> { typedef typename PrimitiveTransform::template impl<Expr, State, int>::result_type type; }; template<typename This, typename Expr, typename State, typename Data> struct result<This(Expr, State, Data)> { typedef typename PrimitiveTransform::template impl<Expr, State, Data>::result_type type; }; template<typename Expr> typename apply_transform<PrimitiveTransform, Expr &>::result_type operator ()(Expr &expr) const { int i = 0; return apply_transform<PrimitiveTransform, Expr &>()(expr, i, i); } template<typename Expr, typename State> typename apply_transform<PrimitiveTransform, Expr &, State &>::result_type operator ()(Expr &expr, State &state) const { int i = 0; return apply_transform<PrimitiveTransform, Expr &, State &>()(expr, state, i); } template<typename Expr, typename State> typename apply_transform<PrimitiveTransform, Expr &, State const &>::result_type operator ()(Expr &expr, State const &state) const { int i = 0; return apply_transform<PrimitiveTransform, Expr &, State const &>()(expr, state, i); } template<typename Expr, typename State, typename Data> typename apply_transform<PrimitiveTransform, Expr &, State &, Data &>::result_type operator ()(Expr &expr, State &state, Data &data) const { return apply_transform<PrimitiveTransform, Expr &, State &, Data &>()(expr, state, data); } template<typename Expr, typename State, typename Data> typename apply_transform<PrimitiveTransform, Expr &, State const &, Data &>::result_type operator ()(Expr &expr, State const &state, Data &data) const { return apply_transform<PrimitiveTransform, Expr &, State const &, Data &>()(expr, state, data); } }; template<typename Expr, typename State, typename Data> struct transform_impl { typedef Expr const expr; typedef Expr const &expr_param; typedef State const state; typedef State const &state_param; typedef Data const data; typedef Data const &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr &, State, Data> { typedef Expr expr; typedef Expr &expr_param; typedef State const state; typedef State const &state_param; typedef Data const data; typedef Data const &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr, State &, Data> { typedef Expr const expr; typedef Expr const &expr_param; typedef State state; typedef State &state_param; typedef Data const data; typedef Data const &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr, State, Data &> { typedef Expr const expr; typedef Expr const &expr_param; typedef State const state; typedef State const &state_param; typedef Data data; typedef Data &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr &, State &, Data> { typedef Expr expr; typedef Expr &expr_param; typedef State state; typedef State &state_param; typedef Data const data; typedef Data const &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr &, State, Data &> { typedef Expr expr; typedef Expr &expr_param; typedef State const state; typedef State const &state_param; typedef Data data; typedef Data &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr, State &, Data &> { typedef Expr const expr; typedef Expr const &expr_param; typedef State state; typedef State &state_param; typedef Data data; typedef Data &data_param; }; template<typename Expr, typename State, typename Data> struct transform_impl<Expr &, State &, Data &> { typedef Expr expr; typedef Expr &expr_param; typedef State state; typedef State &state_param; typedef Data data; typedef Data &data_param; };}} // namespace boost::proto#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?