我想创建一个记录器类,具有如下功能:
Logger log;
log << "Error: " << value << "seen" << endl;
这应该打印一条自定义格式的消息。例如。 “2009 年 9 月 12 日 11:22:33 看到错误 5”
我的简单课程目前如下所示:
class Logger {
private:
ostringstream oss;
public:
template <typename T>
Logger& operator<<(T a);
}
template <typename T>
Logger& Logger::operator<<(T a) {
oss << a;
return *this;
}
void functionTest(void) {
Logger log;
log << "Error: " << 5 << " seen";
}
这将导致oss正确地拥有缓冲区“Error: 5 saw”。但我不知道我需要编写/修改哪些其他函数以便在屏幕上打印一些内容。
有谁知道如何让它发挥作用,或者是否有另一种方法来设计此类以使我的功能发挥作用?
每一个背后std::ostream
is a streambuf
。可以通过以下方式检索和设置std::stream::rdbuf()
。特别是,它可以被包装 - 您可以提供一个对流式文本进行后处理的streambuf对象。
(后期处理意味着你无法区分std::cout << 123;
from std::cout << "123";
)
在您的特定情况下,后处理相当简单。在每一行的开头,您想要插入一些字节。这仅仅意味着您应该跟踪是否已经输出了当前行的前缀。如果没有,请这样做并设置标志。每当您看到换行符时,请重置它。你的streambuf包装器只有一个bool
状态的价值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)