定制"ofstream"输出



我必须扩展ofstream类才能编写日志流服务。

目标是拦截每行,在每个行的头上添加一个自定义文本(日期/时间,严重性等)。

现在,很明显我不是C 大师,所以我读了很多有关此任务的文档,例如

http://www.angelikalanger.com/articles/topics.html#cpphttp://asmodehn.wordpress.com/2010/06/20/busy-c-coding-and-testing
http://gabisoft.free.fr/articles-en.html

上面的文章建议写一个自定义流缓冲区,但是在文件流的移植期间,我遇到了很多困难。

是否有更简单的方法来实现此目标?

您不需要编写自定义流缓冲区;最简单,最直接的方法是使您可以通过给出一个模板化的单个参数运算符<():

来将输出发送到一个类:
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()是您可以插入的示例(您可以创建一个沼泽标准两个参数操作员&lt;&lt;&lt;()以格式化并输出严重性类型。

)。

然后,这允许您做以下操作:

myLogger << "failingFunction(" << argument <<
            "): Could not do something." << std::endl;

您将在看起来像:

的m_outstream上输出

警告2012-01-03 19:32失败功能("参数值"):无法做任何事情。

除此之外,您还需要一种设置严重性的方法,它可以像在Logger类上调用的方法一样简单,您将模板化运算符&lt;&lt;()添加到。如果您想真正发行,可以编写自己的操纵器,就像setw()一样,在std :: ostream上。请参阅http://www.math.hkbu.edu.hk/parallel/pgi/pgi/doc/pgc _lib/stdlibug/stdlibug/man_66665.htm,用于写作操作者的底漆。

相关内容

  • 没有找到相关文章

最新更新