是否有可能使用boost迭代器外观实现任何迭代器? 我不希望在我的基类来定义实施细则AnyIterator和boost迭代器外观
class Base
{
public:
typedef std::vector<int>::iterator iterator;//implementation detail
...
virtual iterator begin()=0;
virtual iterator end()=0;
};
还是我必须从头开始完全写一个;
是否有可能使用boost迭代器外观实现任何迭代器? 我不希望在我的基类来定义实施细则AnyIterator和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
,这可能不是您想要的。耶利米的建议是去与一个缺点的一种方式:你有STL宽松的兼容性......我知道的多态迭代器包装的三种实现的:
any_iterator
(实现boost::iterator_facade
)opaque_iterator
库(谷歌为它),或any_iterator
s STL层次结构。的问题是难度比它看起来......我做了一个尝试自己主要是因为我需要协方差any_iterators
类型参数(any_iterator<Derived>
应该是自动转换为any_iterator<Base>
),这是很难与像迭代器STL简洁地实现。像Enumerator<T>
这样的C#更容易实现(*)(并且imho通常比STL类似的迭代器对更清洁),但是再次,您“松开”了STL。
(*)=当然没有 '产量' :-)
我想这可能是你在找什么:
下面是一个片段该页::
概述
类模板any_iterator是对迭代器 迭代器的boost :: function的模拟。它允许你有一个变量,并为其分配不同类型的迭代器,只要这些迭代器具有合适的通用性。
的方式,我可能会做它是定义像`迭代器`这就像一个Java或C#迭代器的抽象基类,模板化的实现,对于任意的迭代器,然后用Boost.Iterator包一个迭代器接口在任何`Iterator `之上。你想让我试图勾画伪代码吗? –
2011-02-22 17:13:23