invoker.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 133 行

HPP
133
字号
// Copyright Daniel Wallin 2005. Use, modification and distribution is// subject to 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_PARAMETER_INVOKER_051210_HPP# define BOOST_PARAMETER_INVOKER_051210_HPP# include <boost/mpl/begin.hpp># include <boost/mpl/next.hpp># include <boost/mpl/deref.hpp># include <boost/mpl/size.hpp># include <boost/parameter/keyword.hpp># include <boost/preprocessor/iteration/iterate.hpp>namespace boost { namespace parameter { namespace python { namespace aux {template <long Arity, class M, class R, class Args>struct invoker;template <class M, class R>struct make_invoker{    template <class Args>    struct apply    {        typedef invoker<            mpl::size<Args>::value, M, R, Args        > type;    };};template <long Arity, class M, class R, class T, class Args>struct member_invoker;template <class M, class R, class T>struct make_member_invoker{    template <class Args>    struct apply    {        typedef member_invoker<            mpl::size<Args>::value, M, R, T, Args        > type;    };};template <long Arity, class T, class R, class Args>struct call_invoker;template <class T, class R>struct make_call_invoker{    template <class Args>    struct apply    {        typedef call_invoker<            mpl::size<Args>::value, T, R, Args        > type;    };};template <long Arity, class T, class Args>struct init_invoker;template <class T>struct make_init_invoker{    template <class Args>    struct apply    {        typedef init_invoker<            mpl::size<Args>::value, T, Args        > type;    };};template <class M, class R, class Args>struct invoker<0, M, R, Args>{    static R execute()    {        return M()(boost::type<R>());    }};template <class M, class R, class T, class Args>struct member_invoker<0, M, R, T, Args>{    static R execute(T& self)    {        return M()(boost::type<R>(), self);    }};template <class T, class R, class Args>struct call_invoker<0, T, R, Args>{    static R execute(T& self)    {        return self();    }};template <class T, class Args>struct init_invoker<0, T, Args>{    static T* execute(T& self)    {        return new T;    }};# define BOOST_PP_ITERATION_PARAMS_1 (4, \    (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 1))# include BOOST_PP_ITERATE()# define BOOST_PP_ITERATION_PARAMS_1 (4, \    (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 2))# include BOOST_PP_ITERATE()# define BOOST_PP_ITERATION_PARAMS_1 (4, \    (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 3))# include BOOST_PP_ITERATE()# define BOOST_PP_ITERATION_PARAMS_1 (4, \    (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 4))# include BOOST_PP_ITERATE()}}}} // namespace boost::parameter::python::aux#endif // BOOST_PARAMETER_INVOKER_051210_HPP

⌨️ 快捷键说明

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