gpt4 book ai didi

c++ - 自定义 "ofstream"输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:35 25 4
gpt4 key购买 nike

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

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

现在,很明显我不是 C++ 大师,所以我阅读了很多关于这个任务的文档,例如

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

上面的文章建议写一个自定义的流缓冲区,但是在将这个概念移植到文件流上的过程中,我遇到了很多困难。

有没有更简单的方法来实现这个目标?

最佳答案

您不需要编写自定义流缓冲区;最简单和最直接的方法是创建一个可以将输出发送到的类,方法是给它一个模板化的单参数 operator<<():

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() 是您可以插入的示例(您可以创建沼泽标准双参数运算符<<() 来格式化严重性类型并将其输出到 ostream)。

然后这允许您执行以下操作:

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

您将在 m_outstream 上获得如下输出:

WARNING 2012-01-03 19:32 failingFunction("argument value"): Could not do something.

除此之外,您还需要一种设置严重性的方法,它可以像在您添加了模板化运算符<<() 的记录器类上调用的方法一样简单。如果你想变得非常花哨,你可以编写你自己的操纵器,它的行为很像 std::ostream 上的 setw() 。参见 http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/man_6665.htm获取有关书写操纵器的入门知识。

关于c++ - 自定义 "ofstream"输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com