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 /friendly_fusion.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 'friendly_fusion.hpp')
| -rw-r--r-- | friendly_fusion.hpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/friendly_fusion.hpp b/friendly_fusion.hpp index b014bd8..09ec920 100644 --- a/friendly_fusion.hpp +++ b/friendly_fusion.hpp @@ -126,4 +126,40 @@ struct struct_member_name : private traits::is_sequence<T, false>, public boost: } +namespace utils { + +template<typename T, int I> +class DecayedTypeOfAtIndex { + 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::decay<typename deref::type> decayed; + +public: + typedef typename decayed::type type; +}; + +template<typename T, int I> +class RefTypeOfAtIndex { + 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; + +public: + typedef typename deref::type type; +}; + +template<typename T, int I> +class UnrefTypeOfAtIndex { + 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> unrefed; + +public: + typedef typename unrefed::type type; +}; + +} + }
\ No newline at end of file |
