如何用cout样式接口编写一个记录器类(logger <<"错误:"<< val << endl;)

Dhe*_*wal 6 c++ logging cout operator-overloading operators

我想创建一个logger类,使用这样的功能:

Logger log;
log << "Error: " << value << "seen" << endl;
Run Code Online (Sandbox Code Playgroud)

这应该打印一个自定义格式的消息.例如"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";
}
Run Code Online (Sandbox Code Playgroud)

这将导致oss正确地具有缓冲区"Error:5 seen".但我不知道我需要编写/修改其他功能,以便在屏幕上打印某些内容.有谁知道如何使这个工作或是否有另一种方法来设计这个类让我的功能工作?

ere*_*der 1

据我所知,您的记录器与 ostringstream 没有什么不同。它只是获取给定的内容并将其输出到字符串流。如果你想像这样使用它,你可以为 Logger 编写一个析构函数,将字符串输出到 cout。

Logger::~Logger()
{
    std::cout<<getcurrentDateTimeAsString()<<" "<<oss.str()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但当然,如果在整个程序中创建并使用 Logger*,这将毫无意义。