是否可以使用boost迭代器外观实现任何迭代器? 我不想在我的基类
中定义实现细节class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};
或者我必须从头开始写一个;
答案 0 :(得分:9)
您发布的代码修复了从Base
返回的迭代器类型以及它所有的实现std::vector<int>::iterator
,这可能不是您想要的。 Jeremiah的建议是一种方法,有一个缺点:你与STL失去了兼容性......我知道三个多态迭代器包装器的实现:
any_iterator
(实现boost::iterator_facade
)opaque_iterator
库(google for it)或any_iterator
s的STL层次结构。问题比看起来更难......我自己做了一次尝试,主要是因为我需要any_iterators
类型参数中的协方差(any_iterator<Derived>
应该可以自动转换为any_iterator<Base>
)很难用STL像迭代器一样干净利落地实现。类似Enumerator<T>
的C#更容易实现(*)(并且imho通常比类似STL的迭代器对更清晰)但同样,你“松散”了STL。
(*)=当然没有'收益': - )
答案 1 :(得分:3)
我认为这可能是您正在寻找的:
以下是该页面的摘录::
<强>概述强>
类模板any_iterator是boost :: function的类比 迭代器。它允许您拥有一个变量并分配给它 不同类型的迭代器,只要这些迭代器都有 适当的共性。