Создание собственных манипуляторы без аргументов
Манипуляторы записи, которые не используют аргументы требуют ни вывода класса, ни использования сложных макросов.Полагает, что принтер требует пар <Esc>[вход полужирный режим.Можно добавить эту пару непосредственно в поток.
cout << "regular " << '\033' << '[' << "boldface" << endl;
Или можно указать bold манипулятор, который вставляет символы:
ostream& bold( ostream& os ) {
return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;
Глобально указанный bold функция принимает ostream ссылка на аргумент и верните ostream ссылка.Это не является функцией-членом или друга, поскольку для этого не требуется доступ к каким-либо закрытым элементам класса.bold функция подключается к потоку так как поток << оператор перегружен, чтобы принять этот тип функции, используя объявление, выглядит примерно так:
_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{
// call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
Эту функцию можно использовать для расширения другие перегруженные операторы.В этом случае случаина, что она bold вставляет символы в поток.Функция вызывается, когда она представлена в поток, не обязательно, если смежные символы выводятся.Таким образом, введя может быть задержан из-за буферизации потока.