我需要一些指导或指针来了解如何实现自定义 ostream。我的要求是:
- 具有用于多种数据类型的“<<”运算符的类。
- 目的是将输出发送到数据库。每个“行”都应该转到单独的记录。
- 每个记录最重要的字段是文本(或blob),但其他一些字段如时间等大部分可以自动推断
- 缓冲很重要,因为我不想为每条记录都去数据库。
首先,是否值得从 ostream 派生?我从 ostream 派生得到什么?如果我的类只实现了几个operator<<
方法(包括一些自定义数据类型)怎么办。我可以从 ostream 获得哪些功能?
假设我想要的是一个从 ostream 派生的类,我需要一些指导来理解 ostream 和 streambuf 类之间的关系。我需要实施哪一项?查看一些示例,似乎我根本不需要从 ostream 派生,只需给 ostream 构造函数一个自定义的 streambuf。真的吗?这是规范的方法吗?
我需要在自定义 streambuf 中实现哪些虚拟功能?我看过一些示例(包括这个站点:here和here,以及其他一些示例),一些覆盖了该sync
方法,而另一些则覆盖了该overflow
方法。我应该覆盖哪一个?此外,查看 stringbuf 和 filebuf 源(Visual Studio 或 GCC),这两个缓冲区类都实现了 streambuf 的许多方法。
如果需要从 streambuf 派生的自定义类,那么从 stringbuf(或任何其他类)而不是直接从 streambuf 派生是否有任何好处?
至于“线”。我希望至少当我的班级用户使用“endl”操纵器成为一个新行(即数据库中的记录)时。也许 - 取决于努力 - 每个 '\n' 字符也应该被视为一个新记录。我的自定义 ostream 和/或 streambuf 会分别通知谁?