37 typedef typename std::iterator_traits<It>::value_type
43 typedef typename std::remove_reference<
44 decltype( *std::declval<T_pointer>() ) >::type
T;
45 typedef typename std::iterator_traits<It>::iterator_category
47 typedef typename std::iterator_traits<It>::difference_type
57 m_it(from), m_memptr(memptr){}
61 virtual reference operator*()
const;
62 virtual pointer operator->()
const;
63 reference operator[](difference_type n)
const;
76 inline difference_type
78 {
return m_it - rhs.m_it; }
80 bool operator==(
const IteratorToPointerMember<It, R>& rhs)
const
81 {
return m_it == rhs.m_it; }
82 bool operator!=(
const IteratorToPointerMember<It, R>& rhs)
const
83 {
return m_it != rhs.m_it; }
88 value_type
T::* m_memptr;
93 template<
typename It,
typename R>
94 inline typename IteratorToPointerMember<It, R>::reference
95 IteratorToPointerMember<It, R>::operator*()
const
96 {
return (**m_it).*m_memptr; }
98 template<
typename It,
typename R>
99 inline typename IteratorToPointerMember<It, R>::pointer
100 IteratorToPointerMember<It, R>::operator->()
const
101 {
return &((**m_it).*m_memptr); }
103 template<
typename It,
typename R>
104 inline typename IteratorToPointerMember<It, R>::reference
105 IteratorToPointerMember<It, R>::operator[](difference_type n)
const
106 {
return m_it[n].*m_memptr; }
109 template<
typename It,
typename R>
110 inline IteratorToPointerMember<It, R>&
111 IteratorToPointerMember<It, R>::operator++()
112 { ++m_it;
return *
this; }
115 template<
typename It,
typename R>
116 inline IteratorToPointerMember<It, R>&
117 IteratorToPointerMember<It, R>::operator--()
118 { --m_it;
return *
this; }
120 template<
typename It,
typename R>
121 inline IteratorToPointerMember<It, R>&
122 IteratorToPointerMember<It, R>::operator+=(difference_type n)
123 { m_it += n;
return *
this; }
125 template<
typename It,
typename R>
126 inline IteratorToPointerMember<It, R>&
127 IteratorToPointerMember<It, R>::operator-=(difference_type n)
128 { m_it -= n;
return *
this; }
130 template<
typename It,
typename R>
131 inline IteratorToPointerMember<It, R>
132 IteratorToPointerMember<It, R>::operator+(difference_type n)
const
133 {
return IteratorToPointerMember<It, R>(m_it + n, m_memptr); }
135 template<
typename It,
typename R>
136 inline IteratorToPointerMember<It, R>
137 IteratorToPointerMember<It, R>::operator-(difference_type n)
const
138 {
return IteratorToPointerMember<It, R>(m_it - n, m_memptr); }
144 template<
typename It,
typename R>
145 inline IteratorToPointerMember<It, R>
154 template<
typename It,
typename R>
164 template<
typename It,
typename R>
166 make_IteratorToPointerMember(It it, R std::iterator_traits<It>
167 ::value_type::* memptr)
Template class that creates an iterator to a class member based on an iterator to a pointer (either b...
Definition: IteratorToPointerMember.hh:31
IteratorToPointerMember(It from, R T::*memptr)
Construction from an iterator and a pointer to member.
Definition: IteratorToPointerMember.hh:56
std::remove_reference< decltype(*std::declval< T_pointer >)) >::type T
Type of the target of the pointer pointed to by the original iterator.
Definition: IteratorToPointerMember.hh:44
std::iterator_traits< It >::value_type T_pointer
Type of the pointer pointed to by the original iterator.
Definition: IteratorToPointerMember.hh:38