如何编写具有 cout 样式接口的记录器类 (logger << "Error: " << val << endl;)

2024-04-25

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

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

这应该打印一条自定义格式的消息。例如。 “2009 年 9 月 12 日 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";
}

这将导致oss正确地拥有缓冲区“Error: 5 saw”。但我不知道我需要编写/修改哪些其他函数以便在屏幕上打印一些内容。 有谁知道如何让它发挥作用,或者是否有另一种方法来设计此类以使我的功能发挥作用?


每一个背后std::ostream is a streambuf。可以通过以下方式检索和设置std::stream::rdbuf()。特别是,它可以被包装 - 您可以提供一个对流式文本进行后处理的streambuf对象。 (后期处理意味着你无法区分std::cout << 123; from std::cout << "123"; )

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写具有 cout 样式接口的记录器类 (logger << "Error: " << val << endl;) 的相关文章

  • 为什么 PCRE 正则表达式比 C++11 正则表达式快得多

    一些示例代码 这是使用 cregex iterator 的 c 11 部分 std chrono steady clock time point begin0 std chrono steady clock now regex re
  • 何时在定义上下文或实例化点中发生非依赖名称的重载解析?

    3 4 基本 lookup p1 重载解析 13 3 在名称查找成功后发生 void g long void g int int template
  • Windows 控制台中的 C++ 按键输入

    我目前正在开发各种consoleWindows 中的游戏无法通过常规输入真正运行cin 我怎样才能 以简单的方式仅使用 MSVC 中提供的标准 Windows 库 让程序等待 特定 按键并返回按键 ID 它必须适用于包括箭头键在内的所有按键
  • 在 Eclipse 4.4.2 中使用 C 代码中的构建变量

    我有一个之前使用 Eclipse 3 5 2 创建的项目 在其中 我能够在项目属性中设置构建变量 在这种情况下 假设我设置了SW VERSION是 4403 现在这应该是一个十六进制数字 所以在构建设置中 我添加了一个符号 VERSION
  • 使用不存在和联接的 SQL 查询到 LINQ 语法

    我的 SQL 查询如下所示 在 SQL 中运行良好 我需要将其转换为 LINQ 语法 SQL SELECT Key Id FROM LocalizationKeys AS lk WHERE NOT EXISTS SELECT 1 FROM
  • 如何使用 PowerShell 使用 C# DLL 中存在的类的 New-Object

    例如 我有一个 C 类 public class MyComputer PSObject public string UserName get return userName set userName value private strin
  • Collection.Contains() 使用什么来检查现有对象?

    我有一个强类型的自定义对象列表 MyObject 它有一个属性Id 以及一些其他属性 假设Id of a MyObject将其定义为唯一 我想检查我的收藏是否还没有MyObject对象有一个Id在我添加新的之前 共 1 个MyObject到
  • 更改 Logger 实例的全局设置

    我在用着java util logging Logger http download oracle com javase 1 4 2 docs api java util logging Logger html作为我的应用程序的日志引擎 每
  • 在大型数据绑定 ObservableCollection 中添加/删除许多项目,而无需冻结 GUI

    我和我的团队正在开发一个 WPF 应用程序 该应用程序显示多个并发 XamDataChart 控件 由 Infragistics 提供 每个图表都绑定到不同的 ObservableCollection 最多可包含 200 万个点 对于每个图
  • 在 C 中使用另一个结构中的二维结构数组的编码问题

    我正在使用一个二维结构数组 它是另一个结构的一部分 这不是我做过很多事的事情 所以我遇到了问题 该函数在接近末尾的 测试 for 循环后最终失败 它在出现段错误之前正确打印出一行 我的代码中将数据读入虚拟二维结构数组的部分工作得很好 所以它
  • 如何检测机器是否加入域?

    如何检测计算机是否已加入 Active Directory 域 相对于工作组模式 如果没有必要的话 不要用 pinvoke 来愚弄 参考System DirectoryServices 然后调用 System DirectoryServic
  • 弹出窗口或弹出窗口显示附加信息

    我想在我的应用程序顶部显示带有附加信息的弹出窗口 我的信息是Listview大约 500 个项目我都尝试过 有问题flyout gt 它里面可能有scrollViewer 所以我的列表视图不能正确虚拟化 其他一切都可以 有我的代码 Flyo
  • 使用指针隐藏实现(Pimpl 惯用语)

    是否有可能实现以下目标 x hpp 该文件被许多其他类包含 class x impl forward declare class x public methods private x impl impl x cpp 实施 include
  • 如何使用 Xamarin 应用程序开发自动注销

    我必须在 App xaml cs 上添加功能才能使其正常工作 我在 OnStart 上添加了功能 但现在它会间歇性地一次又一次地将我从应用程序中注销 根据下面的代码 我需要做什么才能让它停止这样做 或者我的代码有问题 这是我最新的代码 na
  • 为什么 `boost::any` 比 `void*` 更好?

    有什么先天优势boost any and boost any cast提供超过使用void and dynamic cast 优点是boost any比类型安全得多void E g int i 5 void p i static cast
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • C# 中 WinForm TextBox 中数字的按键事件

    我想限制用户在文本框中仅输入数字 我在按键事件中添加此代码 private void txtPartID KeyPress object sender KeyPressEventArgs e if e KeyChar gt 0 e KeyC
  • 在源代码和预编译二进制文件之间切换

    我们的应用程序中有大量的库 库是用 C 或 C 编写的 平台 net Framework Windows 64 位 将所有内容编译为源代码需要花费大量时间 我们正在考虑切换到预构建的二进制文件 但我们仍然希望保留返回源代码的可能性 作为版本
  • WCF - IsOneway 的行为不像 Oneway 操作

    我已在服务的某些方法上定义了 OneWay 属性 但它们的行为并不像 Oneway 调用 我的客户等待呼叫完成并从服务返回 我假设单向操作是非阻塞操作 并且客户端不关心被调用函数会发生什么 它只是调用并忘记它 这是对的吗 问题 调用 Ope

随机推荐

  • 无法从字符串中删除“\r\n”

    我有一个像这样的字符串 la lala 135 1039 921 r n 而且我无法删除 r n 最初这个字符串是一个字节对象 但后来我将它转换为字符串 我尝试过 strip r n 与 replace r n 但什么也没有 gt gt g
  • 为什么 HTTP 请求在 Chrome 中陷入挂起状态?

    语言 工具版本 角度 cli 1 2 0 PHP 7 0 8 Zend 表达 2 阿帕奇2 4 23 铬65 0 3325 181 Windows 7的 Issue 我有一个 Angular2 应用程序 它使用 PHP 应用程序作为所有 X
  • java以一种方式绘制矩形而不是同时使用两种方式

    你好 我在java中有一些代码可以绘制一个矩形 但是它只会向右拖动 即使我向左拖动它也会向右拖动 这是代码我有什么帮助吗 public void mouseDragged MouseEvent e Point p e getPoint in
  • 同时使用 POST 和 GET 的 HttpWebRequest

    我需要将用户重定向到http www someurl com id 2 http www someurl com id 2使用 POST 方法 是否可以 如果是 那么如何 现在我有以下内容 它正确转发 POST 数据 但它删除了 id 2
  • 如何在级联下拉列表中显示选定的值?

    我想要为编辑视图中的选定值扩展以下代码 以国家 gt 州 gt 城市为例 我有脚本 Cascading DropDown List js function bindDropDownList e targetDropDownList var
  • 如何在Windows服务程序中捕获SERVICE_CONTROL_SHUTDOWN代码

    我最近正在编写一个Windows服务程序 我在编程时遇到的问题是 当我在 Windows 操作系统上安装程序时 它无法正常关闭 关闭系统需要很长时间 看来我的程序是问题的原因 我试图在互联网上找到解决方案 我发现在我的代码中添加 SERVI
  • FF 和 IE 不从 CSS 加载 img src

    我正在使用这样的 css 设置图像的 src Banner content url Banners prussia awesomeness gif width 1000px 这是我的图片 div class Header img src a
  • 视频无法以全屏模式播放

    当我尝试在全屏浏览中播放嵌入视频时 出现 NPE 它在 3 0 蜂窝中运行良好 但在 ICS 4 0 中运行不佳 知道如何解决这个问题吗 java lang NullPointerException at android webkit Pl
  • php codeigniter 中的 concat

    请帮助我理解正确的连接语法 我有一个名为存货其中有 trans id trans items items gt item id trans user employees gt person id trans date trans comme
  • boost::mpi 和 boost:serialization with std::variant

    c 17引入了新类型std variant 是否可以定义一个序列化例程 以便使用std variant和这个结合boost mpi 例如 考虑一个简单的程序 include
  • 如何从网址下载所有文件?

    我想从 URL 获取所有文件 文件可能有不同类型的扩展名 如何从网站 URL 获取带有 webclient 对象的所有文件 当我打开网站网址时 文件列出如下格式 框架 js 我的文件 png Class1 cs 来自 Web URL 的文件
  • iOS 将 URL 中的音频分成帧

    我正在 iOS 上开发一个简单的网络广播应用程序 具有非常简单的语音 音乐识别功能 主要思想是一个收音机 它播放来自 url 的信号 同时检查正在广播的信号类型 当它检测到语音时 它会改变频道等等 我使用 Storyboards 和 AVF
  • PHP 上的多个 TCP 套接字请求

    是否可以使用 PHP 上的套接字服务器接受多个请求 并行 如果可以的话 怎样做 普通的 PHP 脚本无法接收多个请求 但如果你真的计划创建一个套接字服务器 作为 cmdline php 脚本启动 那么是的 这是可能的 调查http pear
  • 使用 Json.Net 自定义 DateTime 序列化

    我尝试创建自定义日期时间转换器失败 问题 我有许多对象要序列化 其中一些包含 DateTime 的属性 其中包含 DateTime MinValue 我想将其序列化为空 但是我发现的所有解决方案都要求装饰对象内部的正确位置 我做不到 我在下
  • Linq“等于”关键字

    LINQ 中的 equals 关键字是否会检查左侧和右侧的对象是否指向同一对象 记忆或检查其内容 它比较了values 另请参阅Linq 连接中 和 equals 有什么区别 https stackoverflow com question
  • RuntimeError:使用 docker 关闭连接后无法重用套接字

    我正在关注本教程 https github com getamis eth indexer blob master README md fbclid IwAR3g3SAjJ9ik hHCFkol2k8YXo0GvBL15oSNC hIU38
  • ListView:通过鼠标拖动多选项目

    In ListView I can press Ctrl Shift and click on the item to select But I want to drag the mouse to select the items like
  • 在 Angular 2 子模块中强制服务实例化(AngularJS 运行块的替代方案)

    我在子模块中有一个服务 它包装了一些第三方模块 实例化并初始化其服务以准备在应用程序中使用 Injectable class SubmoduleInitializerService constructor thirdPartyService
  • 如何使用 Linq to SQL 查找行的 ROW_NUMBER()

    Linq to SQL 利用ROW NUMBER 用于分页目的 即当您使用 Skip 和 Take 时 但是 我似乎找不到实际访问的方法ROW NUMBER 在查询中评估我自己 我需要在查询中找到记录的 ROW NUMBER 无需带回所有记
  • 如何编写具有 cout 样式接口的记录器类 (logger << "Error: " << val << endl;)

    我想创建一个记录器类 具有如下功能 Logger log log lt lt Error lt lt value lt lt seen lt lt endl 这应该打印一条自定义格式的消息 例如 2009 年 9 月 12 日 11 22