C++ 实现迭代器的接口
我正在编写一个类,它将迭代一组句柄。基本上,我正在处理一组实现以下接口的C函数:C++ 实现迭代器的接口,c++,tdd,C++,Tdd,我正在编写一个类,它将迭代一组句柄。基本上,我正在处理一组实现以下接口的C函数: SomeHandle getFirst(ParentHandle); SomeHandle getNext(SomeHandle); 这是我的迭代器接口及其部分实现。我需要一个接口,这样我就可以为了TDD的目的模拟这个迭代器 template<class HandleT> class IHandleIterator { public: virtual void operator++() =
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;
};
但是我不知道怎么做。有人能给我提些建议吗
如果我找不到涉及操作员的解决方案!=那么我想知道这是否是一个好方法:
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;
}
你觉得怎么样?这两个主意本身对我来说都不好。继承、虚拟分派、严重填充的内存浪费结构、迭代器和游标方法的混合。为什么?寻找问题的解决方案?你不能用模板而不是界面来模拟吗?这种方法与C++中通常使用迭代器的方式不相混合,因为迭代器几乎完全由值传递。这不适用于接口。我还质疑模拟迭代器的决定。模拟由迭代器表示的集合。@Konrad Rudolph:迭代器为什么按值传递?你的意思是说我应该做这样的事情:手语@Baz,因为它更便宜,而且通常不按价值传递它们是没有意义的。例如,所有标准的库算法都是按值传递迭代器的。@Konrad Rudolph:好的,我会详细介绍一下。我说的对吗?你认为我应该通过一个MockHandle类来进行单元测试,我用它来实例化我的HandleIterator模板类?
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;
}