frostar@wiki
AccessIterator
最終更新:
frostar
-
view
特定のオブジェクトのメンバ関数にイテレータで得られる引数を順次渡し、
その戻り値を返すイテレータ。
その戻り値を返すイテレータ。
T_it:イテレータの型
T_ret:戻り値の型
T_arg:引数の型
T_cls:オブジェクトのクラス
T_ret:戻り値の型
T_arg:引数の型
T_cls:オブジェクトのクラス
ここで、イテレータは引数のイテレータであるため、暗黙的に引数の型(T_ret)のイテレータである。
template<class T_it,class T_ret,class T_arg,class T_cls> class AccessIterator: public std::iterator<std::input_iterator_tag,T_ret>{ public: typedef T_ret (T_cls::*AccessFunc)(T_arg) const; T_it it; T_cls *object; AccessFunc func; public: AccessIterator(){ } AccessIterator( T_it ite, T_cls *obj, AccessFunc _func){ it = ite; object = obj; func = _func; } T_ret operator *() const{ return (object->*func)(*it); } AccessIterator& operator ++(){ ++it; return *this; } AccessIterator operator ++(int){ T_it bit = it; ++(*this); return AccessIterator(bit,object,func); } const bool operator !=(const AccessIterator& ite) const{ return it!=ite.it; } const bool operator ==(const AccessIterator& ite) const{ return it==ite.it; } operator T_it(){ return it; } operator T_arg(){ return *it; } };