我重载了运算符<<
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工作的工作是什么?
我正在尝试创建一个简单的类似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)