最近想要做一个日志输出接口,想用类似std::cout这种流式输出方法,研究了一下C++的标准输入输出库 iostream
图片摘自cppreference:

- ios_base,basic_ios不需要过多关注,是一些基础结构和接口定义,基本用不到
- basic_ostream用于流式输出(std::cout实现自这个类),basic_istream用于流式输入(std::cin实现自这个类),如果想要通过流的方式处理数据就得用到这两个类,iostream是他们两个的合集。
- basic_ofstream,basic_ostringstream则是输出的两个具体实现,一个用于输出数据到文件,一个用于输出数据到字符串,basic_ifstream,basic_istringstream与之对应,用于读取文件和读取数据
我们的Log模块就需要用到basic_ostream这样的流输出接口。basic_ostream定义了一套输出接口,put/write/<<这三种输出方式,所以我们让Log继承自std::basic_ostream<char>这个类,支持对char字符串的流式输出。basic_ostream需要一个streambuf用于存放输出的数据,我们Log要输出到文件中,所以文件的buf自然就作为basic_ostream的buf了。
static std::ofstream ofstream_;
Log::Log():std::ostream(ofstream_.rdbuf())
{
}

本文探讨了如何使用C++的iostream库创建一个类似std::cout的日志输出接口。通过继承std::basic_ostream<char>,结合basic_ostream的put/write/<<方法,将日志数据输出到文件。同时提到了如果要将流输出内容存储到自定义缓冲区,可以继承std::streambuf并实现overflow和xsputn接口。
最低0.47元/天 解锁文章
8875

被折叠的 条评论
为什么被折叠?



