I'm trying to create a simple qDebug-like class I can use to output debug messages in debug mode, dependant on some debug level passed when calling the app. I liked the ease of use of the QDebug class (which could be used as a std::cerr and would disappear when compiling in release mode). I have this so far:
#ifdef DEBUG
    static int CAKE_DebugLevel;
    class Debug
    {
        Debug( int level ) : m_output( level <= CAKE_DebugLevel ) {}
        template<typename T>
        Debug& operator<<( T )
        {
            if( m_output )
            {
                std::cout << T;
                return *this;
            }
            else
                return *this;
        }
    private:
        bool m_output;
    };
#else // release mode compile
    #define Debug nullstream
#endif // DEBUG
I think a nullstream-kind of thing would be best for the release mode define:
class nullstream{};
template <typename T>
nullstream& operator<<(nullstream& ns, T)
{
    return ns;
}
In main I have for the moment:
#include "Debug.h"
#include <iostream>
int main()
{
    Debug(0) << "Running debug version of CAKE." << std::endl;
}
Which is giving the following error with gcc 4.5.1:
In member function 'Debug& CAKE_Debug::operator<<(T)': expected primary-expression before ';' token (points at the line
std::cout << T;)In function 'int main(int, char**, char**)': expected unqualified-id before '<<' token
I'm sure it's something simple, but all the general template info I've found turns up nothing. Thanks for any help!
If you need more info, please ask.
 
     
     
     
     
     
     
    