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









