Manipuladores de fluxo de saída com um argumento (int ou long)
A biblioteca de classes iostream fornece um conjunto de macros para criar manipuladores com parâmetros. Manipuladores com um único argumento int
ou long
são um caso especial. Para criar um manipulador de fluxo de saída que aceita apenas um argumento int
ou long
(como setw
), você precisa usar a macro _Smanip, que é definida em <iomanip>. Este exemplo define um manipulador fillblank
que insere um número especificado de espaços em branco no fluxo:
Exemplo
// output_stream_manip.cpp
// compile with: /GR /EHsc
#include <iostream>
#include <iomanip>
using namespace std;
void fb( ios_base& os, int l )
{
ostream *pos = dynamic_cast<ostream*>(&os);
if (pos)
{
for( int i=0; i < l; i++ )
(*pos) << ' ';
};
}
_Smanip<int>
__cdecl fillblank(int no)
{
return (_Smanip<int>(&fb, no));
}
int main( )
{
cout << "10 blanks follow" << fillblank( 10 ) << ".\n";
}