【问题标题】:stream interface for logger, C++ [closed]记录器的流接口,C++ [关闭]
【发布时间】:2018-04-24 07:10:22
【问题描述】:

我需要实现类似这样的 LoggerStream

LoggerStream() << "Logged this info " << " my info with value = " << value;

我有一个带有函数信息的类 Logger。

std::ostringstream msg;
msg << "my info " << " with value = " << value;
logInfo(msg.str());

如何编写这个包装器 LoggerStream() ?

谢谢!

【问题讨论】:

  • 你尝试了什么?
  • 简化记录器的使用
  • 我的意思是你写了什么代码,你遇到了什么问题?当前,您的问题读作“请给我代码”,但我希望您没有遇到需要帮助的特定问题就来到这里,因为“给我代码”不太可能发生。 SO 不是代码编写服务
  • 我有这个任务,我什至不知道从哪里开始。 LoggerStream 是一个函数吗?但是
  • 考虑std::coutstd::cerr。回想一下,从程序的角度来看,标准输出和标准错误是文件句柄

标签: c++ c++11 iostream


【解决方案1】:

这是一个非常复杂的记录器用例。您需要重新实现许多运算符以促进输出。不要创建函数类.. 创建自注册类(即,每个输出目标仅存在一个实例,例如每个日志文件)或像ostream 一样工作的单例,或者甚至可以转换为ostream ,那么您可以使用为ostream定义的所有运算符

本质上,它将是 std::ostream 的包装,并定义了转换运算符。

【讨论】:

    【解决方案2】:

    简而言之:LoggerStream 需要一个构造函数、一个 &lt;&lt; 的重载和一个析构函数,它将一些内部流刷新到您想要登录的任何流。

    【讨论】:

    • PS:并不是说这是一个高质量的答案,但我开始改变写cmets而不是答案的习惯,希望OP能澄清这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2012-12-17
    • 2012-02-22
    相关资源
    最近更新 更多