Создание манипуляторов с параметрами
Создание функций-манипуляторов, имеющих аргументы, несколько сложнее, чем манипуляторов без аргументов. Одна из причин этого заключается в том, что в Borland С++ параметризованные манипуляторы используют классы-шаблоны. Эти классы создаются с использованием ключевого слова template. Если не представлять, как работают классы-шаблоны, то нельзя полностью понять создание параметризованных манипуляторов.
ЗАМЕТКА: Описанный ниже метод работает для Borland С++, но он может не работать для других компиляторов.
Для создания параметризованного манипулятора необходимо в файл включить заголовочный файл iomanip.h. В этом файле определено несколько шаблонов. Мы будем использовать два из них — omanip и imanip. Первый используется для создания манипуляторов вывода с аргументами. Второй используется для создания параметризованных манипуляторов ввода. (Можно взглянуть на определения этих классов в файле iomanip.h для того, чтобы посмотреть, как они реализованы.)
В общем случае, если необходимо создать манипулятор, имеющий аргументы, то следует создать две перегруженных функции-манипулятора. В одной необходимо определить два параметра. В качестве первого параметра используется ссылка на поток, а вторым является параметр, передаваемый в функцию. Вторая версия манипулятора имеет один параметр — тот, который указывается при использовании манипулятора в выражениях ввода/вывода. Эта вторая версия генерирует вызов первой версии. Общая форма манипуляторов вывода с параметрами имеет вид:
ostream &имя_манипулятора(ostream &поток, тип параметр) // код return поток; > // перегрузка omanip <тип> имя_манипулятора(тип параметр)