Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
The following example uses a class money, which is a long type. The setpic manipulator attaches a formatting "picture" string to the class that can be used by the overloaded stream insertion operator of the class money. The picture string is stored as a static variable in the money class rather than as data member of a stream class, so you do not have to derive a new output stream class.
Example
// 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;
}