Создание манипуляторов с параметрами

Создание манипуляторов с параметрами

Создание функций-манипуляторов, имеющих аргументы, несколько сложнее, чем манипуляторов без аргументов. Одна из причин этого заключается в том, что в Borland С++ параметризованные манипуляторы используют классы-шаблоны. Эти классы создаются с использованием ключевого слова template. Если не представлять, как работа­ют классы-шаблоны, то нельзя полностью понять создание параметризованных манипуляторов.

ЗАМЕТКА: Описан­ный ниже метод работает для Borland С++, но он может не работать для других компиляторов.

Для создания параметризованного манипулятора необходимо в файл включить заголовочный файл iomanip.h. В этом файле определено несколько шаблонов. Мы будем использовать два из них — omanip и imanip. Первый используется для создания манипуляторов вывода с аргументами. Второй используется для создания параметризованных манипуляторов ввода. (Можно взглянуть на опре­деления этих классов в файле iomanip.h для того, чтобы посмотреть, как они реализованы.)

В общем случае, если необходимо создать манипулятор, имеющий аргументы, то следует со­здать две перегруженных функции-манипулятора. В одной необходимо определить два парамет­ра. В качестве первого параметра используется ссылка на поток, а вторым является параметр, передаваемый в функцию. Вторая версия манипулятора имеет один параметр — тот, который указывается при использовании манипулятора в выражениях ввода/вывода. Эта вторая версия генерирует вызов первой версии. Общая форма манипуляторов вывода с параметрами имеет вид:

ostream &имя_манипулятора(ostream &поток, тип параметр) // код return поток; > // перегрузка omanip <тип> имя_манипулятора(тип параметр)

📎📎📎📎📎📎📎📎📎📎