是否可以使用 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。它允许您拥有一个变量并为它分配不同类型的迭代器,只要这些迭代器具有合适的共性。