Boost C++ 库

……世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

类模板 eof_iterator - Boost C++ 函数库
PrevUpHomeNext

类模板 eof_iterator

boost::eof_iterator

提要

// In header: <boost/program_options/eof_iterator.hpp>

template<typename Derived, typename ValueType> 
class eof_iterator :
  public iterator_facade< Derived, const ValueType, forward_traversal_tag >
{
public:

  // public member functions
  eof_iterator();

  // protected member functions
  ValueType & value();
  void found_eof();

  // private member functions
  void increment();
  bool equal(const eof_iterator &) const;
  const ValueType & dereference() const;
};

描述

'eof_iterator' 类对于构造前向迭代器非常有用,在迭代器从某个源提取数据并且易于检测“eof”(即没有数据的情况)时。一个明显的例子是从文件中读取行。

直接使用 'iterator_facade' 实现此类迭代器需要创建具有三个核心操作和一个构造函数对的类。在使用 'eof_iterator' 时,派生类只需定义一个获取新值的方法,加上一个构造函数对。

基本思想是迭代器有一个“eof”位。只有当两个迭代器的“eof”位都设置为 1 时,它们才相等。“get”方法要么获取新值,要么设置“eof”位。

具体来说,派生类应定义:

  1. 一个默认构造函数,它创建一个“eof”位设置为 1 的迭代器。构造函数体应调用此处定义的 'found_eof' 方法。

  2. 其他构造函数。它应初始化迭代器操作中使用的某个“数据指针”,然后调用 'get'。

  3. 'get' 方法。它应按如下方式操作:

    • 查看某个“数据指针”以确定是否有新元素可用;如果没有,则应调用 'found_eof'。

    • 提取新元素并将其存储在 'value' 方法返回的位置。

    • 移动数据指针。

本质上,'get' 方法同时具备 'increment' 和 'dereference' 的功能。它非常适用于数据提取会隐式移动数据指针的情况,例如流操作。

eof_iterator 公共成员函数

  1. eof_iterator();

eof_iterator 受保护的成员函数

  1. ValueType & value();

    返回应由派生类用于存储下一个值的引用。

  2. void found_eof();

    派生类应调用此方法以指示它无法生成下一个元素。

eof_iterator 私有成员函数

  1. void increment();
  2. bool equal(const eof_iterator & other) const;
  3. const ValueType & dereference() const;

PrevUpHomeNext