Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现迭代器的接口_C++_Tdd - Fatal编程技术网

C++ 实现迭代器的接口

C++ 实现迭代器的接口,c++,tdd,C++,Tdd,我正在编写一个类,它将迭代一组句柄。基本上,我正在处理一组实现以下接口的C函数: SomeHandle getFirst(ParentHandle); SomeHandle getNext(SomeHandle); 这是我的迭代器接口及其部分实现。我需要一个接口,这样我就可以为了TDD的目的模拟这个迭代器 template<class HandleT> class IHandleIterator { public: virtual void operator++() =

我正在编写一个类,它将迭代一组句柄。基本上,我正在处理一组实现以下接口的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;
};
但是我不知道怎么做。有人能给我提些建议吗

如果我找不到涉及操作员的解决方案!=那么我想知道这是否是一个好方法:

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