5

是否可以使用 boost 迭代器外观实现任何迭代器?我不想在我的基类中定义实现细节

class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};

还是我必须完全从头开始写一个;

4

2 回答 2

9

您发布的代码已经修复了返回的迭代器的类型Base以及它的所有实现,std::vector<int>::iterator这可能不是您想要的。Jeremiah 的建议是解决一个缺点的一种方法:你失去了与 STL 的兼容性......我知道多态迭代器包装器的三种实现:

  1. 贝克尔的any_iterator(实现boost::iterator_facade
  2. 图书馆opaque_iterator(谷歌),或
  3. Adobe 非常有趣的 poly 库,其中包含符合 STL 的层次结构any_iterator

这个问题比看起来更难......我自己做了一个尝试,主要是因为我需要any_iterators类型参数的协方差(any_iterator<Derived>应该自动转换为any_iterator<Base>),这很难用像迭代器这样的 STL 来干净地实现。AC# 之类Enumerator<T>的更容易实现(*)(恕我直言,它通常比类似 STL 的迭代器对更简洁),但同样,您“松散”了 STL。

(*) = 当然没有'yield' :-)

于 2011-02-23T07:07:34.173 回答
3

我认为这可能是您正在寻找的:

any_iterator:C++ 迭代器的类型擦除

这是该页面的一个片段:

概述

类模板 any_iterator 类似于迭代器的 boost::function。它允许您拥有一个变量并为它分配不同类型的迭代器,只要这些迭代器具有合适的共性。

于 2011-04-08T17:34:37.160 回答