[lug] simple iostream bug?
Jonathan Briggs
zlynx at acm.org
Thu Mar 14 17:39:57 MST 2002
A quick correction to myself. I was curious about the endl manipulator
thing and so I looked it up. The endl function is declared as ostream&
endl(ostream&). Basically. (Lots of template stuff in there with it.)
When used just as endl, it is a function pointer. The iostreams
library has a declaration to deal with these by calling the function
pointer on the stream.
So your TextHeader function should work fine if you just call it as cout
<< TextHeader << endl;
Jonathan Briggs wrote:
> This is because you are sending a ostream reference (the return value
> of TextHeader) into an ostream and it appears to be converting it into
> an unsigned long. This is probably because iostreams return true if
> the stream state is good and false if the stream state is bad (so you
> can do while( cout ), or similar things.)
>
> Just do TextHeader( cout ).
>
> If you want to be able to do cout << TextHeader (as a manipulator,
> like how endl is used) you'll need to do some more magic (Bear with
> me, I'm not sure I remember this perfectly. You may need to consult
> documentation.):
>
> Create a manipulator class/struct: This can be anything, it doesn't
> have to be part of any hierarchy.
> If it takes an argument, you make the constructor take the arguments.
> If it doesn't take arguments, I think you need to create a global
> instance of your class (I _think_ endl is an instance of something.)
> Make a non-member function for ostream& operator<<(ostream&,
> [your_manipulator_class])
[snip]
More information about the LUG
mailing list