diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-25 11:16:36 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-25 11:16:36 +0200 |
| commit | 84c15aecc7d296d25b7fd5ead6730f8d132d350f (patch) | |
| tree | e5e435007c97105ad819f0df84da3027d2e82d9d /fusion_static_dispatch.hpp | |
| parent | d4ea872acfee5d4bf563334181400a9fef7d5add (diff) | |
| download | generic-gui-84c15aecc7d296d25b7fd5ead6730f8d132d350f.tar.gz generic-gui-84c15aecc7d296d25b7fd5ead6730f8d132d350f.tar.bz2 generic-gui-84c15aecc7d296d25b7fd5ead6730f8d132d350f.zip | |
Adds a initial implementation of a Form, as a proof-of-concept.
Diffstat (limited to 'fusion_static_dispatch.hpp')
| -rw-r--r-- | fusion_static_dispatch.hpp | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/fusion_static_dispatch.hpp b/fusion_static_dispatch.hpp index 6b3ad42..5db3e16 100644 --- a/fusion_static_dispatch.hpp +++ b/fusion_static_dispatch.hpp @@ -19,7 +19,7 @@ typename F<U>::return_type apply_functor_to_member_impl(indices<Indices...>, int { typedef std::function<typename F<U>::return_type(Args...)> f_type; static f_type array[] = { - (std::function<typename F<U>::return_type(Args...)>) F<U>::template call<Indices> + F<U>::template call<Indices> ... }; @@ -31,7 +31,7 @@ typename F<Arg1>::return_type apply_functor_to_member_impl(indices<Indices...>, { typedef std::function<typename F<Arg1>::return_type(Arg1&, Args...)> f_type; static f_type array[] = { - (std::function<typename F<Arg1>::return_type(Arg1&, Args...)>) F<Arg1>::template call<Indices> + F<Arg1>::template call<Indices> ... }; @@ -58,12 +58,9 @@ struct is_const_functor template <int I> static return_type call() { - typedef friendly_fusion::result_of::begin<T> begin; - typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it; - typedef friendly_fusion::result_of::deref<typename adv_it::type> deref; - typedef std::remove_reference<typename deref::type> unreferenced_type; + typedef typename friendly_fusion::utils::UnrefTypeOfAtIndex<T, I>::type unref_type; - return std::is_const<typename unreferenced_type::type>::value; + return std::is_const<unref_type>::value; } }; @@ -105,7 +102,6 @@ typename std::enable_if<!b, void>::type assign(T& lh, V rh) lh = rh; } - template <typename T> struct set_nth_functor { @@ -114,13 +110,10 @@ struct set_nth_functor template <int I> static return_type call(T& t, boost::any const& value) { - typedef friendly_fusion::result_of::begin<T> begin; - typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it; - typedef friendly_fusion::result_of::deref<typename adv_it::type> deref; - typedef typename std::decay<typename deref::type>::type value_type; - typedef typename std::remove_reference<typename deref::type>::type unreferenced_type; + typedef typename friendly_fusion::utils::DecayedTypeOfAtIndex<T, I>::type value_type; + typedef typename friendly_fusion::utils::UnrefTypeOfAtIndex<T, I>::type unref_type; - assign<std::is_const<unreferenced_type>::value>(friendly_fusion::deref(friendly_fusion::advance_c<I>(friendly_fusion::begin(t))), boost::any_cast<value_type>(value)); + assign<std::is_const<unref_type>::value>(friendly_fusion::deref(friendly_fusion::advance_c<I>(friendly_fusion::begin(t))), boost::any_cast<value_type>(value)); } }; @@ -154,7 +147,7 @@ struct get_nth_name_functor<boost::fusion::joint_view<T,U>> if(I < size_of_T){ return apply_functor_to_member<T, get_nth_name_functor>(I); } else { - return apply_functor_to_member<U, get_nth_name_functor>(I); + return apply_functor_to_member<U, get_nth_name_functor>(I - size_of_T); } } }; |
