Boost logo

Boost Users :

From: Dan Dimerman (dimerman_at_[hidden])
Date: 2004-12-22 11:33:45


Richard Howells wrote:
> Well it might be crude but sometimes the pre-processor is your friend...
>
> template<class T>
> MyLogger & operator<<(MyLogger & log, T o)
> {
> #if defined(_DEBUG)
> // code goes here
> #else
> // leave empty
> #endif
> }
>
> ...but your problem is still there because you don’t know what to put in
> 'code goes here'. I think you still need a family of strongly typed
> MyLogger::print overloads to call there.
>

That would be the easy part.
It becomes trickier, when you want to specify a logging severity level,
such as in:

        the_logger.printf< Log::DBG >( "some message %d.", 42 );

you may want to use manipulators, as in:

        the_logger << Log::dbg << "some message" << 42;

but then again, when using operator<<, you have no guarantees of what
happens if several threads are writing to the same logger. Then you may
get mixed/mangled messages. To fix this you may want to use a "flush"
manipulator, but (to my taste) at that level the complexity of the
operator approach defeats its purpose, i.e. simplicity and elegance.

Dan


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net