我们有一个基于带有自定义流缓冲区的 std::ostream 的日志实现。我们通过 Schwarz 计数器实现我们应用程序的日志类实例。
为了避免将较低级别的类耦合到我们的日志实现,我们可以传递对 std::ostream 的引用。通过这种方式,我们的低级类可以记录到 std::cout、std::cerr 或通过 Schwarz 计数器创建的实例。
我对此有一个问题。日志实现通过流运算符的重载设置其严重性:
// Overload the << operator to set the log message severity
inline CLogStream& operator << (CLogStream& myLogStream, eMsgType::type msgTypeCurrent)
{
myLogStream.SetMsgTypeCurrent(msgTypeCurrent);
return ( myLogStream ) ;
}
这允许我们像这样使用记录器:
CLog::Main << CLog::MSG_FATAL << "Fatal error" << std::endl;
我想创建一个对我们应用程序的日志实例的引用,该日志被锁定到特定的严重性。这样,我可以将两个 std::ostream 引用传递给我们的实用程序类。其中一个用于正常报告,另一个用于错误报告。这些可以设置为 std::cout 和 std::cerr,或者设置为引用我们的日志对象实例的某种对象。
不幸的是,据我所知,std::ostream 运算符 << 不是虚拟的,所以我不确定如何设计这样的对象。
有什么想法吗?