我在记录器类中使用ostream时遇到问题。由于某些原因,不会输出std :: endl,因此不添加换行符。我敢肯定有什么问题,我在尝试了解如何在自己的班级中使用我的ostream时遇到问题,因此我可能做了一些根本性的错误。
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;
}
输出:
kekekekasdf: 23kekekekasdf: 23
最佳答案
尝试这个:
inline std::ostream& operator << (std::ostream& (*f)(std::ostream&))
{
std::cout << f;
return *this;
}
关于c++ - C++-在我自己的类中使用ostream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9402477/