// 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 # include # include # include # include # include namespace boost { namespace parameter { namespace python { namespace aux { template struct invoker; template struct make_invoker { template struct apply { typedef invoker< mpl::size::value, M, R, Args > type; }; }; template struct member_invoker; template struct make_member_invoker { template struct apply { typedef member_invoker< mpl::size::value, M, R, T, Args > type; }; }; template struct call_invoker; template struct make_call_invoker { template struct apply { typedef call_invoker< mpl::size::value, T, R, Args > type; }; }; template struct init_invoker; template struct make_init_invoker { template struct apply { typedef init_invoker< mpl::size::value, T, Args > type; }; }; template struct invoker<0, M, R, Args> { static R execute() { return M()(boost::type()); } }; template struct member_invoker<0, M, R, T, Args> { static R execute(T& self) { return M()(boost::type(), self); } }; template struct call_invoker<0, T, R, Args> { static R execute(T& self) { return self(); } }; template 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, , 1)) # include BOOST_PP_ITERATE() # define BOOST_PP_ITERATION_PARAMS_1 (4, \ (1, BOOST_PARAMETER_MAX_ARITY, , 2)) # include BOOST_PP_ITERATE() # define BOOST_PP_ITERATION_PARAMS_1 (4, \ (1, BOOST_PARAMETER_MAX_ARITY, , 3)) # include BOOST_PP_ITERATE() # define BOOST_PP_ITERATION_PARAMS_1 (4, \ (1, BOOST_PARAMETER_MAX_ARITY, , 4)) # include BOOST_PP_ITERATE() }}}} // namespace boost::parameter::python::aux #endif // BOOST_PARAMETER_INVOKER_051210_HPP