相关疑难解决方法(0)

当重载operator <<时,std :: endl是未知类型

我重载了运算符<<

template <Typename T>
UIStream& operator<<(const T);

UIStream my_stream;
my_stream << 10 << " heads";
Run Code Online (Sandbox Code Playgroud)

工作但是:

my_stream << endl;
Run Code Online (Sandbox Code Playgroud)

给出编译错误:

错误C2678:二进制'<<':找不到哪个运算符带有'UIStream'类型的左操作数(或者没有可接受的转换)

my_stream << endl工作的工作是什么?

c++ stl operator-overloading

58
推荐指数
4
解决办法
2万
查看次数

带有模板化运算符<<的带条件调试输出类

我正在尝试创建一个简单的类似qDebug的类,我可以用来在调试模式下输出调试消息,这取决于调用应用程序时传递的一些调试级别.我喜欢QDebug类的易用性(它可以用作std :: cerr,并且在发布模式下编译时会消失).到目前为止我有这个:

#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
Run Code Online (Sandbox Code Playgroud)

我认为nullstream对于发布模式定义来说,最好的东西是最好的:

class nullstream{};

template <typename T>
nullstream& operator<<(nullstream& ns, T)
{
    return ns;
}
Run Code Online (Sandbox Code Playgroud)

主要是我暂时:

#include "Debug.h"

#include <iostream>

int …
Run Code Online (Sandbox Code Playgroud)

c++ debugging templates

3
推荐指数
2
解决办法
5948
查看次数

标签 统计

c++ ×2

debugging ×1

operator-overloading ×1

stl ×1

templates ×1