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

📄 eval.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
////////////////////////////////////////////////////////////////////////////////// \file eval.hpp/// Contains the eval() expression evaluator.////  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_EVAL_HPP_EAN_03_29_2007#define BOOST_PROTO_EVAL_HPP_EAN_03_29_2007#include <boost/xpressive/proto/detail/prefix.hpp> // must be first include#include <boost/xpressive/proto/proto_fwd.hpp> // BOOST_PROTO_CALLABLE#include <boost/type_traits/remove_reference.hpp>#include <boost/xpressive/proto/detail/suffix.hpp> // must be last includenamespace boost { namespace proto{    namespace result_of    {        /// \brief A metafunction for calculating the return type        /// of \c proto::eval() given a certain \c Expr and \c Context        /// types.        ///        /// \note The types \c Expr and \c Context should not be        /// reference types. They may be cv-qualified, but the        /// cv-qualification on the \c Context parameter is ignored.        template<typename Expr, typename Context>        struct eval        {            typedef typename Context::template eval<Expr>::result_type type;        };    }    namespace functional    {        /// \brief A PolymorphicFunctionObject type for        /// evaluating a given Proto expression with a given        /// context.        struct eval        {            BOOST_PROTO_CALLABLE()            template<typename Sig>            struct result;            template<typename This, typename Expr, typename Context>            struct result<This(Expr, Context)>            {                typedef                    typename proto::result_of::eval<                        typename remove_reference<Expr>::type                      , typename remove_reference<Context>::type                    >::type                type;            };            /// \brief Evaluate a given Proto expression with a given            /// context.            /// \param expr The Proto expression to evaluate            /// \param context The context in which the expression should be            ///     evaluated.            /// \return <tt>typename Context::template eval<Expr>()(expr, context)</tt>            template<typename Expr, typename Context>            typename proto::result_of::eval<Expr, Context>::type            operator ()(Expr &expr, Context &context) const            {                return typename Context::template eval<Expr>()(expr, context);            }            /// \overload            ///            template<typename Expr, typename Context>            typename proto::result_of::eval<Expr, Context>::type            operator ()(Expr &expr, Context const &context) const            {                return typename Context::template eval<Expr>()(expr, context);            }        };    }    /// \brief A PolymorphicFunctionObject for    /// evaluating a given Proto expression with    /// a given context.    ///    /// \sa proto::functional::eval.    functional::eval const eval = {};}}#endif

⌨️ 快捷键说明

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