AnyIterator和boost迭代器外观

时间:2011-02-22 17:04:17

标签: c++ iterator any

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

中定义实现细节
class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};

或者我必须从头开始写一个;

2 个答案:

答案 0 :(得分:9)

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

  1. becker的any_iterator(实现boost::iterator_facade
  2. opaque_iterator库(google for it)或
  3. Adob​​e非常有趣的poly库,其中包含符合any_iterator s的STL层次结构。
  4. 问题比看起来更难......我自己做了一次尝试,主要是因为我需要any_iterators类型参数中的协方差(any_iterator<Derived>应该可以自动转换为any_iterator<Base>)很难用STL像迭代器一样干净利落地实现。类似Enumerator<T>的C#更容易实现(*)(并且imho通常比类似STL的迭代器对更清晰)但同样,你“松散”了STL。

    (*)=当然没有'收益': - )

答案 1 :(得分:3)

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

  

any_iterator: Type Erasure for C++ Iterators

以下是该页面的摘录::

  

<强>概述

     

类模板any_iterator是boost :: function的类比   迭代器。它允许您拥有一个变量并分配给它   不同类型的迭代器,只要这些迭代器都有   适当的共性。