我正在编写一个将遍历一组句柄的类。基本上我正在处理一堆实现以下接口的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;
}
你怎么看?