标签: iterator-facade

提升迭代器外观和dereference()函数

我正在尝试创建一个迭代器,它只能取消引用实际值类型,而不是引用.是否可以使用boost::iterator_facade,或者它是否要求我具有可由adress\reference返回的值.

为了更具说明性,我的迭代器返回一个std::pair引用,这意味着我的迭代器value_type不会存储在任何地方,而是在解除引用时动态创建(如std::map::iterator).

boost boost-iterators iterator-facade

9
推荐指数
1
解决办法
1598
查看次数

如何包装java.util.Iterator以更改正在迭代的对象的类型

我正在为第三方API提供一些外观类,我需要包装一个迭代器,以便我可以替换用我自己的外观对象迭代的东西.

这是我的facade类的简化版本,它包装了一个名为Item的API类

class FacadeItem {
    Item item;
    FacadeItem(Item item) {
        this.item = item;
    }
}
Run Code Online (Sandbox Code Playgroud)

API提供此表单的迭代器 Iterator<Item>

我需要实现此形式Iterator<FacadeItem>的迭代器,该迭代器由API的迭代器支持.

我考虑过如下使用Guava库中的ForwardingIterator:

class FacadeItemIterator<FacadeItem> extends ForwardingIterator<Item> {

    final Iterator<Item> delegate; // backing iterator

    FacadeItemIterator(Iterator<Item> delegate) {
        this.delegate = delegate;
    }

    @Override protected Iterator<Item> delegate() {
        return delegate;
    }

    @Override
    public FacadeItem next() {
        return new FacadeItem(super.next());
    }
}
Run Code Online (Sandbox Code Playgroud)

next()编译器不允许覆盖,因为它期望返回的类型是Item,而不是FacadeItem

java collections guava iterator-facade

3
推荐指数
1
解决办法
2737
查看次数