Compartilhar via


Escrever seus próprio Manipulators sem argumentos

Gravação de manipulators que não usam argumentos requer nem derivação da classe nem o uso de macros complexos.Suponha que sua impressora requer o par <ESC> [para entrar no modo de negrito.Você pode inserir esse par diretamente no fluxo:

cout << "regular " << '\033' << '[' << "boldface" << endl;

Ou você pode definir a bold manipulator, que insere os caracteres:

ostream& bold( ostream& os ) {
    return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;

Definido globalmente bold funciona leva um ostream de referência argumento e retorna o ostream referência.Não é uma função de membro ou um amigo porque ele não precisa de acesso a quaisquer elementos de classe privada.O bold função se conecta ao fluxo porque o fluxo << operador sobrecarregado para aceitar esse tipo de função, usando uma declaração parecida com isto:

_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{   
   // call ios_base manipulator
   (*_Pfn)(*(ios_base *)this);
   return (*this);
}

Você pode usar esse recurso para estender outros operadores sobrecarregados.Nesse caso, ele é incidental que bold insere caracteres no fluxo.A função é chamada quando ela for inserida no fluxo, não necessariamente quando os caracteres adjacentes são impressos.Assim, a impressão pode ser atrasada devido o fluxo de buffer.

Consulte também

Referência

Fluxos de saída