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;
}
};










