AFEPack
|
00001 00011 #ifndef __DerefIterator_h__ 00012 #define __DerefIterator_h__ 00013 00014 template <class IT, class VT> 00015 struct _Deref_iterator : public IT { 00016 typedef _Deref_iterator<IT,VT> _Self; 00017 typedef IT _Base; 00018 00019 typedef VT value_type; 00020 typedef value_type* pointer; 00021 typedef value_type& reference; 00022 00023 _Deref_iterator() : _Base() {} 00024 _Deref_iterator(const _Base& __x) : _Base(__x) {} 00025 _Deref_iterator(const _Self& __x) : _Base(__x) {} 00026 00027 template <class OIT> 00028 _Self& operator=(const OIT& __x) { 00029 _Base::operator=(__x); 00030 return *this; 00031 } 00032 00033 reference deref() const { return dynamic_cast<reference>(*(_Base::operator*())); } 00034 00035 reference operator*() const { return deref(); } 00036 pointer operator->() const { return &deref(); } 00037 }; 00038 00039 #endif // __DerefIterator_h__ 00040