c++ - C++ 如何编写带有cout样式接口( 记录器 <<"错误的记录器类:" <<瓦尔 <<endl ;)

  显示原文与译文双语对照的内容

我想创建一个记录器类,这样具有如下功能:


Logger log;


log <<"Error:" <<value <<"seen" <<endl;



这应该会给我一个定制的格式化消息。 比如"12-09-2009 11:22:33 错误 5"

我的简单类当前看起来像这样:


class Logger {


 private:


 ostringstream oss;


 public:


 template <typename T>


 Logger& operator<<(T a);


}



template <typename T>


Logger& Logger::operator<<(T a) {


 oss <<a;


 return *this;


}



void functionTest(void) {


 Logger log;


 log <<"Error:" <<5 <<" seen";


}



这将导致 操作系统 正确地拥有缓冲区": 5见"。但我不知道需要编写/修改的它的他功能,以便在屏幕上打印某些东西。 有人知道如何使这个工作或者是另一种方式设计这个类来使我的功能工作?

时间: 原作者:

每个 std::ostream 后面都有一个 streambuf 。 通过 std::stream::rdbuf() 检索和设置它。 特别是,可以包装它- 可以提供post对象来处理流文本。 ( 后处理意味着你不能区分 std::cout <<123;std::cout <<"123"; )

在你的特殊情况下,后处理相当简单。 在每一行的开头都要插入一些字节。 这仅仅意味着你应该跟踪是否已经输出了当前行的前缀。 如果没有,那么这样做并设置标志。 当你看到换行时,重置它。 streambuf包装器只有一个 bool 值。

原作者:
...