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”(即没有数据的情况)时,'eof_iterator' 类对于构造前向迭代器很有用。一个明显的例子是从文件中读取行。

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

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

具体来说,派生类应定义

  1. 一个默认构造函数,该构造函数创建具有已设置 'eof' 位的迭代器。构造函数体应调用此处定义的 '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