gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:30 24 4
gpt4 key购买 nike

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

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";
}

这将导致oss正确地拥有缓冲区“Error: 5 seen”。但我不知道我还需要编写/修改什么其他功能才能在屏幕上打印某些内容。有谁知道如何让它工作,或者是否有另一种方法来设计这个类来让我的功能正常工作?

最佳答案

在每个 std::ostream 后面是 streambuf .它可以通过 std::stream::rdbuf() 检索和设置.特别是,它可以被包装——您可以提供一个 streambuf 对象来对流文本进行后处理。(后处理 意味着您无法区分 std::cout << 123;std::cout << "123"; )

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

关于c++ - 如何编写具有 cout 样式接口(interface)的记录器类 (logger << "Error: "<< val << endl;),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com