您不需要编写自定义流缓冲区;最简单和最直接的方法是创建一个可以向其发送输出的类,方法是给它一个模板化的单参数运算符<<():
template <typename T>
std::ostream& operator<<(const T& data_)
{
m_outstream << m_severity << "\t" << getTimeStamp() << "\t" << data_;
return m_outstream;
}
其中 m_outstream 是某种类型的 std::ostream(std::ofstream 等)。m_severity 和 getTimeStamp() 是您可以插入的示例(您可以创建一个沼泽标准两个参数 operator<<() 来格式化严重性类型并将其输出到 ostream)。
然后,这允许您执行以下操作:
myLogger << "failingFunction(" << argument <<
"): Could not do something." << std::endl;
您将在 m_outstream 上获得如下输出:
警告 2012 年 1 月 3 日 19:32 失败函数(“参数值”):无法做某事。
除此之外,您还需要一种设置严重性的方法,它可以像在您添加模板化操作符<<() 的记录器类上调用的方法一样简单。如果你想变得非常花哨,你可以编写你自己的操纵器,它的作用很像 setw() 在 std::ostream 上的作用。请参阅http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/man_6665.htm了解编写操纵器的入门知识。