Поделиться через


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

Манипуляторы записи, которые не используют аргументы требуют ни вывода класса, ни использования сложных макросов.Полагает, что принтер требует пар <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 вставляет символы в поток.Функция вызывается, когда она представлена в поток, не обязательно, если смежные символы выводятся.Таким образом, введя может быть задержан из-за буферизации потока.

См. также

Ссылки

Потоки вывода