是否可以使用 boost 迭代器外观实现任何迭代器?我不想在我的基类中定义实现细节
class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};
还是我必须完全从头开始写一个;
您发布的代码已经修复了返回的迭代器的类型Base以及它的所有实现,std::vector<int>::iterator这可能不是您想要的。Jeremiah 的建议是解决一个缺点的一种方法:你失去了与 STL 的兼容性......我知道多态迭代器包装器的三种实现:
any_iterator(实现boost::iterator_facade)opaque_iterator(谷歌),或any_iterator。这个问题比看起来更难......我自己做了一个尝试,主要是因为我需要any_iterators类型参数的协方差(any_iterator<Derived>应该自动转换为any_iterator<Base>),这很难用像迭代器这样的 STL 来干净地实现。AC# 之类Enumerator<T>的更容易实现(*)(恕我直言,它通常比类似 STL 的迭代器对更简洁),但同样,您“松散”了 STL。
(*) = 当然没有'yield' :-)
我认为这可能是您正在寻找的:
这是该页面的一个片段:
概述
类模板 any_iterator 类似于迭代器的 boost::function。它允许您拥有一个变量并为它分配不同类型的迭代器,只要这些迭代器具有合适的共性。