要像 std C++ 流一样使用自定义的日志类,您可以创建一个新的日志类,并重载一些操作符,以便它们与流类似的工作。以下是一个简单的示例,说明如何实现这一点:
#include<iostream>
#include <sstream>
#include<string>
class Log {
public:
Log() : m_buffer() {}
~Log() {
flush();
}
template<typename T>
Log& operator<<(const T& data) {
m_buffer<< data;
return *this;
}
Log& operator<<(std::ostream& (*func)(std::ostream&)) {
func(m_buffer);
return *this;
}
void flush() {
std::cout << m_buffer.str()<< std::endl;
m_buffer.str("");
}
private:
std::stringstream m_buffer;
};
int main() {
Log log;
log << "Hello, " << "World!"<< std::endl;
log << "The answer is: " << 42 << std::endl;
return 0;
}
在这个示例中,我们创建了一个名为 Log
的新类,它具有一个缓冲区,用于存储日志消息。我们重载了 <<
操作符,以便它可以像流一样接受数据。我们还重载了 <<
操作符,以便它可以处理流操作符,如 std::endl
。
flush()
函数将缓冲区的内容输出到控制台,并清空缓冲区。在析构函数中,我们调用 flush()
函数,以确保在销毁日志对象时,所有日志消息都已输出。
这个简单的示例可以根据您的需求进行扩展和修改。例如,您可以将日志消息写入文件,或者添加其他操作符重载,以便更好地控制日志记录。
领取专属 10元无门槛券
手把手带您无忧上云