| 693 | { |
| 694 | template <class Class, class Options> |
| 695 | void visit(Class& cl, char const* name, Options const& options) const |
| 696 | { |
| 697 | typedef mpl::iterator_range< |
| 698 | typename mpl::next< |
| 699 | typename mpl::begin<ParameterSpecs>::type |
| 700 | >::type |
| 701 | , typename mpl::end<ParameterSpecs>::type |
| 702 | > arg_types; |
| 703 | |
| 704 | typedef typename mpl::front<ParameterSpecs>::type result_type; |
| 705 | |
| 706 | typedef typename mpl::transform< |
| 707 | arg_types |
| 708 | , aux::make_kw_spec<mpl::_> |
| 709 | , mpl::back_inserter<mpl::vector0<> > |
| 710 | >::type arg_specs; |
| 711 | |
| 712 | typedef typename mpl::count_if< |
| 713 | arg_specs |
| 714 | , aux::is_optional<mpl::_> |
| 715 | >::type optional_arity; |
| 716 | |
| 717 | typedef typename mpl::shift_left<mpl::long_<1>, optional_arity>::type upper; |
| 718 | |
| 719 | aux::def_combinations( |
| 720 | aux::def_class<Class, Options>(cl, name, options) |
| 721 | , (arg_specs*)0 |
| 722 | , mpl::long_<0>() |
| 723 | , mpl::long_<upper::value>() |
| 724 | , (aux::make_member_invoker< |
| 725 | Fwd, result_type, typename Class::wrapped_type |
| 726 | >*)0 |
| 727 | ); |
| 728 | } |
| 729 | }; |
| 730 | |
| 731 | }}} // namespace boost::parameter::python |
nothing calls this directly
no test coverage detected