I’m having problems using a ostream in my logger class. For some reason, the std::endl is never printed out and so no newline is added. I am sure there is something wrong, I’m having problems trying to understand how to use my ostream in my own classes so I have probably done something fundamentaly wrong.
class MyStreamBuf : public std::streambuf
{
public:
MyStreamBuf() : std::streambuf()
{
}
};
class MyLogger : public std::ostream
{
public:
MyLogger(MyStreamBuf* buf) : std::ostream(buf) { mBuf = buf; }
~MyLogger() { delete mBuf; }
template <typename T>
inline MyLogger& operator << (T const& value)
{
#ifdef _WIN32 || _WIN64
std::cout << value;
#endif
return *this;
}
inline std::ostream& operator << (std::ostream& (*f)(std::ostream&))
{
return f(*this);
}
MyStreamBuf* mBuf;
};
int _tmain(int argc, _TCHAR* argv[])
{
MyStreamBuf* buf = new MyStreamBuf();
MyLogger logger(buf);
logger << "kekekek" << "asdf: " << 23 << std::endl;
logger << "kekekek" << "asdf: " << 23 << std::endl;;
getchar();
return 0;
}
Output:
kekekekasdf: 23kekekekasdf: 23
Try this: