Справочник по C/C++
Создание манипуляторов

Существует две разновидности манипуляторов: без параметров и с параметрами. Поскольку создание параметризованных манипуляторов выходит за рамки этой книги, следует отметить, что создание собственных манипуляторов, не имеющих параметров, — задача совсем несложная.

Все не имеющие параметров манипуляторы вывода имеют следующую структуру.

ostream &manip-name(ostream &stream)
{
	// Текст программы,
	return stream;
}

Здесь manip-name — имя манипулятора. Обратите внимание, что манипулятор возвращает ссылку на поток типа ostream. Это необходимо в случае, если манипулятор должен использоваться как часть большого выражения ввода-вывода. Важно понимать, что, хотя манипулятор использует в качестве своего единственного параметра ссылку на поток, с которым он работает, при вставке манипулятора в операцию вывода аргументы у него отсутствуют.

Все не имеющие параметров манипуляторы ввода имеют следующую структуру.

istream &manip-name(istream &stream)
{
	// Текст программы.
	return stream;
}

Манипулятор ввода получает ссылку на поток, для которого он был вызван. Этот манипулятор должен вернутьссылку на "свой" поток.

Вот пример простого манипулятора вывода с именем setup(). Он устанавливает выравнивание по левому краю, делает ширину поля равной значению 10 и задает в качестве символа заполнителя знак доллара.

#include <iostream>
#include <iomanip> using namespace std; ostream &setup(ostream &stream) { stream.setf(ios::left) ; stream << setw(10) << setfill('$'); return stream; } int main () { cout << 10 << " " << setup << 10; return 0; }

Помните: ваш манипулятор должен возвращать поток stream. В противном случае его нельзя использовать в ряде операций ввода и вывода.



Реклама