我有自定义集合Collection
。返回Iter
的自定义迭代器Obj*
和对象包装器Wrapper
:
Collection c;
// Collection initialization skipped here
Iter it = c.getIter();
while (Obj* obj = it++) {
Wrapper w(obj);
w.doSomething();
}
我想创建一个类似STL的迭代器(iterator
和const_iterator
,没有代码重复),让我的代码看起来像:
for (Collection::iterator it = c.begin(); it != c.end(); ++it) {
it->doSomething();
}
和
for (Collection::const_iterator it = c.begin(); it != c.end(); ++it) {
it->querySomething();
}
如何使用boost迭代器适配器/外观来实现这一目标?
我相信我应该使用boost::iterator_facade
:
... : public boost::iterator_facade<Derived, Value, CategoryOrTraversal, Reference>
我的第一个问题是Value
和Reference
类型参数应该是什么。 Reference
显然是Wrapper
,因为它是迭代器取消引用的结果,但是什么是Value
?