在自定义迭代器

时间:2016-05-02 05:53:54

标签: c++ boost iterator

我有自定义集合Collection。返回Iter的自定义迭代器Obj*和对象包装器Wrapper

Collection c;
// Collection initialization skipped here
Iter it = c.getIter();
while (Obj* obj = it++) {
    Wrapper w(obj);
    w.doSomething();
}

我想创建一个类似STL的迭代器(iteratorconst_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>

我的第一个问题是ValueReference类型参数应该是什么。 Reference显然是Wrapper,因为它是迭代器取消引用的结果,但是什么是Value

0 个答案:

没有答案