制作不存储 value_type 的 InputIterator

Crafting an InputIterator that does not store the value_type

我正在创建一个模型 InputIterator。在我的应用程序中,"skip the first hundred thousand elements" 是一件合理的事情,而创建 value_type 是昂贵的,所以我希望我的迭代器仅在取消引用时创建 value_type,而不是在递增时创建。

我可以轻松地按值使 operator* return 成为 value_type。但是我不知道如何处理operator->。如果我的迭代器不存储 value_type,我如何 return 一个指针?我害怕临时指针的终身问题,不想被烧毁。

我想过不提供operator->,但那样我就没有完整的InputIterator

我相信它会根据迭代器 operator-> 的值对 return 代理对象起作用。代理将有一个 value_type 数据成员,以及它自己的 operator-> return 指向该数据成员的指针。

代理对象的生命周期与任何其他 return 按值对象相同(就像我对 operator* 的计划),所以尽管我确实有一个 pointer-to-temporary,但在这些情况它在代理对象被销毁之前被消耗掉。