7 #ifndef _QITYPE_DETAIL_ACCESSOR_HXX_
8 #define _QITYPE_DETAIL_ACCESSOR_HXX_
10 #include <boost/type_traits.hpp>
11 #include <boost/utility/enable_if.hpp>
20 template<
typename T,
typename Vo
id =
void>
struct Accessor
22 using is_accessor = boost::false_type;
27 using value_type =
typename boost::remove_const<T>::type;
32 template<
typename C,
typename T>
struct Accessor<T C::*, typename boost::enable_if<typename boost::is_member_object_pointer<T C::*> >::type >
36 static T& access(C* instance, type acc)
38 return *instance.*acc;
41 template<
typename C,
typename T>
struct Accessor<T& (C::*)()>
42 :
public AccessorBase<C, T>
44 using type = T& (C::*)();
45 static T& access(C* instance, type acc)
47 return (*instance.*acc)();
50 template<
typename C,
typename T>
struct Accessor<T& (C::*)()
const>
51 :
public AccessorBase<C, T>
53 using type = T& (C::*)()
const;
54 static T& access(C* instance, type acc)
56 return (*instance.*acc)();
59 template<
typename C,
typename T>
struct Accessor<T& (*)(C*)>
60 :
public AccessorBase<C, T>
62 using type = T& (*)(C*);
63 static T& access(C* instance, type acc)
71 #endif // _QITYPE_DETAIL_ACCESSOR_HXX_
typename boost::remove_const< T >::type value_type
boost::true_type is_accessor