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

📄 member.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
/*=============================================================================    Copyright (c) 2005-2007 Dan Marsden    Copyright (c) 2005-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_OPERATOR_MEMBER_HPP#define PHOENIX_OPERATOR_MEMBER_HPP#include <boost/spirit/home/phoenix/core/actor.hpp>#include <boost/spirit/home/phoenix/core/composite.hpp>#include <boost/spirit/home/phoenix/core/compose.hpp>#include <boost/type_traits/add_reference.hpp>#include <boost/type_traits/add_const.hpp>#include <boost/type_traits/is_const.hpp>#include <boost/type_traits/remove_reference.hpp>#include <boost/type_traits/is_member_pointer.hpp>#include <boost/type_traits/is_member_function_pointer.hpp>#include <boost/mpl/eval_if.hpp>#include <boost/mpl/identity.hpp>#include <boost/mpl/and.hpp>#include <boost/mpl/not.hpp>#include <boost/utility/enable_if.hpp>#include <boost/get_pointer.hpp>#include <boost/preprocessor/arithmetic/sub.hpp>#if !defined(PHOENIX_MEMBER_LIMIT)#define PHOENIX_MEMBER_LIMIT BOOST_PP_SUB(PHOENIX_COMPOSITE_LIMIT, 2)#endif#include <boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp>#include <memory>namespace boost {     template<typename T> class shared_ptr;    template<typename T> class scoped_ptr;namespace phoenix {    namespace detail    {        template<typename T>        struct member_type;                template<typename Class, typename MemberType>        struct member_type<MemberType (Class::*)>        {            typedef MemberType type;        };    }    namespace meta    {        template<typename T>         struct pointed_type;        template<typename T>        struct pointed_type<T*>        {            typedef T type;        };        template<typename T>        struct pointed_type<shared_ptr<T> >        {            typedef T type;        };                template<typename T>        struct pointed_type<scoped_ptr<T> >        {            typedef T type;        };        template<typename T>        struct pointed_type<std::auto_ptr<T> >        {            typedef T type;        };    }    struct member_object_eval    {        template<typename Env, typename PtrActor, typename MemPtrActor>        struct result        {            typedef typename detail::member_type<                typename eval_result<MemPtrActor, Env>::type>::type member_type;            typedef typename meta::pointed_type<                typename remove_reference<                typename eval_result<PtrActor, Env>::type>::type>::type object_type;            typedef typename add_reference<                typename mpl::eval_if<                is_const<object_type>,                add_const<member_type>,                mpl::identity<member_type> >::type>::type type;        };        template<typename Rt, typename Env, typename PtrActor, typename MemPtrActor>        static typename result<Env,PtrActor,MemPtrActor>::type        eval(const Env& env, PtrActor& ptrActor, MemPtrActor& memPtrActor)        {            return get_pointer(ptrActor.eval(env))->*memPtrActor.eval(env);        }    };    namespace member_object    {        template<typename T0, typename MemObjPtr>        typename enable_if<            mpl::and_<is_member_pointer<MemObjPtr>, mpl::not_<is_member_function_pointer<MemObjPtr> > >,            actor<typename as_composite<            member_object_eval, actor<T0>,            typename as_actor<MemObjPtr>::type>::type> >::type        operator->*(            const actor<T0>& ptrActor,             MemObjPtr memObjPtr)        {            return compose<member_object_eval>(                ptrActor,                as_actor<MemObjPtr>::convert(memObjPtr));        }    }    namespace member_function    {        template<typename T0, typename MemFunPtr>        typename enable_if<            is_member_function_pointer<MemFunPtr>,            mem_fun_ptr_gen<actor<T0>, MemFunPtr> >::type        operator->*(const actor<T0>& ptrActor, MemFunPtr memFunPtr)        {            return mem_fun_ptr_gen<actor<T0>, MemFunPtr>(                ptrActor, memFunPtr);        }    }    using member_object::operator->*;    using member_function::operator->*;}}#endif

⌨️ 快捷键说明

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