一連のハンドルを反復処理するクラスを作成しています。基本的に、私は次のインターフェイスを実装する一連の C 関数に対して作業しています。
SomeHandle getFirst(ParentHandle);
SomeHandle getNext(SomeHandle);
これが私の反復子のインターフェースとその部分的な実装です。TDD の目的でこの反復子をモックできるように、インターフェイスが必要です。
template<class HandleT>
class IHandleIterator
{
public:
virtual void operator++() = 0;
virtual const HandleT& operator*() const = 0;
};
template<class HandleT>
class HandleIterator : public IHandleIterator<HandleT>
{
public:
// used by something.end()
HandleIterator() : _isLast(true)
{
}
// updates _isLast when the end is reached
virtual void operator++()
{
}
virtual const HandleT& operator*() const
{
return _currentHandle;
}
protected:
HandleT _currentHandle;
bool _isLast;
};
私がやりたいことは、次のように、反復処理の最後に到達したときにテストするインターフェイスに operator!= を追加することです。
for(IHandleIterator i=something.begin(); i!=seomething.end(); i++)
{
*i;
}
しかし、これを行う方法がわかりません。誰でも私に提案を提供できますか?
operator!= を含む解決策が見つからない場合、これが良いアプローチであるかどうか疑問に思っています。
class IHandleIterator
{
public:
virtual void operator++() = 0;
virtual const HandleT& operator*() const = 0;
virtual bool isLast const = 0;
};
for(IHandleIterator i=something.begin(); !i.isLast(); i++)
{
*i;
}
どう思いますか?