Прочие манипуляторы потока вывода с одним аргументом
В следующем примере используется класс money, тип long. Манипулятор setpic вложение «строка форматирования» фигуры на класс, который может быть использован перегруженных оператором вставки потока класса money. Строка рисунка хранится как статической переменной в классе money, а не как члена данных класса потока, поэтому не нужно создать новый класс потока вывода.
Пример
// one_arg_output.cpp
// compile with: /GR /EHsc
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
typedef char* charp;
class money
{
private:
long value;
static char *szCurrentPic;
public:
money( long val ) { value = val; }
friend ostream& operator << ( ostream& os, money m ) {
// A more complete function would merge the picture
// with the value rather than simply appending it
os << m.value << '[' << money::szCurrentPic << ']';
return os;
}
static void setpic( char* szPic ) {
money::szCurrentPic = new char[strlen( szPic ) + 1];
strcpy_s( money::szCurrentPic, strlen( szPic ) + 1, szPic );
}
};
char *money::szCurrentPic; // Static pointer to picture
void fb( ios_base& os, char * somename )
{
money::setpic(somename);
/*
ostream *pos = dynamic_cast<ostream*>(&os);
if (pos)
{
for( int i=0; i < l; i++ )
(*pos) << ' ';
};
*/
}
_Smanip<charp>
__cdecl setpic(char * somename)
{
return (_Smanip<charp>(&fb, somename));
}
int main( )
{
money amt = (long)35235.22;
cout << setiosflags( ios::fixed );
cout << setpic( "###,###,###.##" ) << "amount = " << amt << endl;
}