Шаг 484.
Библиотека STL. Ввод-вывод с использованием потоковых классов. Стандартные функции ввода-вывода. Пользовательские манипуляторы

    На этом шаге мы рассмотрим создание пользовательских манипуляторов.

    В программе можно определять нестандартные (пользовательские) манипуляторы. Все, что для этого нужно, - написать функцию наподобие приведенной ранее функции endl(). Например, следующая функция определяет манипулятор, который игнорирует все символы до конца строки:

#include <istream>
#include <limits>

template <class charT, class traits>
inline
std::basic_istream<charT,traits>&
ignoreLine (std::basic_istream<charT,traits>& strm)
{
    // Пропуск символов до конца строки
    strm.ignore(std::numeric_limits<int>::max(),strm.widen('\n'));

    // Возвращение strm для организации цепочечных вызовов
    return strm;
}

    Манипулятор просто поручает работу функции ignore(), которая игнорирует все символы до конца строки (функция ignore() описана на 479 шаге). Применение манипулятора выглядит очень просто:

  // Пропустить символы до конца строки 
  std::cin >> ignoreLine;

    Многократный вывод манипулятора позволяет проигнорировать сразу несколько строк:

  // Пропустить две строки
  std::cin >> ignoreLine >> ignoreLine;

    Такая конструкция работает, поскольку вызов функции ignore (max, с) означает пропуск всех символов, пока не обнаружится символ с во входном потоке данных (или пока не будет прочитано максимальное количество символов, или пока не будет достигнут конец потока данных). Но этот символ также пропускается перед возвращением из функции.

    Со следующего шага мы начнем рассматривать форматирование.




Предыдущий шаг Содержание Следующий шаг