0

一連のハンドルを反復処理するクラスを作成しています。基本的に、私は次のインターフェイスを実装する一連の 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;
}

どう思いますか?

4

0 に答える 0