gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnash-commit] gnash ChangeLog libbase/log.cpp libbase/log.h


From: Sandro Santilli
Subject: Re: [Gnash-commit] gnash ChangeLog libbase/log.cpp libbase/log.h
Date: Fri, 8 Dec 2006 14:01:03 +0100

On Fri, Dec 08, 2006 at 12:56:29PM +0000, Sandro Santilli wrote:

Few more comments on this.

> Log message:
>               * libbase/log.{cpp,h}: add a templated operator << for
>                 printing *any* class that has an output operator defined.
>                 It could replace most operator<< methods, but I won't go
>                 there for now... just happy with derived Range2d printing 
> facility.

> -LogFile::operator << (std::string &s)
> +LogFile::operator << (const std::string &s)

This is needed because stringstream.str() returns a 'const' string,
so if we have NO method that takes a 'const' string the templated
method (const reference to *any* class) is choosed again, resulting
in an infinite recursion.

> +#include <sstream>

Unfortunately the "templated" implementation  requires to have
this include in the log.h header...

> +
> +    /// Print anything that can be printed on a stringstream
> +    //
> +    /// This template function could replace ALL but
> +    /// operator << (const std::string&) members of
> +    /// LogFile class.
> +    ///
> +    template <class T>
> +    LogFile& operator << (const T& any)
> +    {
> +         std::stringstream ss;
> +         ss << any;
> +         return *this << ss.str();
> +    }

As you can see we could drop *all* operator<< and just
leave the one for std::string. The downside is we'll be
using stringstream for printing *everything*, but the
code would be much more cleaner..

--strk;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]