我正在尝试编写一个自定义std::ostream
,它为写入它的每一行调用一个函数。也就是说,我希望以下代码能够按照注释中的说明工作:
my_output_stream s([] (const std::string& line) {
WriteLineToSomeOutput(line);
});
s << "Hello world"; // do not invoke anything. The line has not ended yet!
s << ", from Alex" << std::endl; // here we invoke WriteLineToSomeOutput("hello world, from Alex")
s << "What's up"; // do not invoke anything. The line has not ended yet.
s << ", doc?!\nHow u doing?\n"; // Now we have two lines. We invoke WriteLineToSomeOutput("What's up, doc?!) and WriteLineToSomeOutput("How u doing?")
请注意,数据不会写入任何地方,也不会存储在任何地方。我需要流存储的唯一内容是正在聚合的当前行,直到我们遇到行尾。
即使使用 boost.Iostreams 库,我也没有找到任何简单的方法。我可以通过使用 STL 和 Boost 的一些内置工具来避免在这里编写自己的行标记器吗?
背景
该类my_output_stream
将用于在我的应用程序中使用的外部库和日志库之间进行调整。外部库要求我提供一个 std::ostream。我想使用我的应用程序的日志框架记录外部库记录的每一行。