小编pan*_*yte的帖子

将时间戳打印到 ostream 的最简单方法

我想向 std::cout / std::cerr ostreams 的某些输出添加时间戳,而不使用修改后的标准流,如下所示:

std::cerr << timestamp << "Warning!\n";
Run Code Online (Sandbox Code Playgroud)

或者:

std::cerr << timestamp() << "Warning!\n";
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

[2020-01-23 17:40:15 CET] Warning!
Run Code Online (Sandbox Code Playgroud)

但我真的对我的想法并不满意:

class TimeStamp {};

std::ostream &operator<<(std::ostream &stream, const TimeStamp &ts) 
{
    std::time_t t = std::time(nullptr);
    stream << "[" << std::put_time(std::localtime(&t), "%F %T %Z") << "] ";
    return stream;
}

TimeStamp ts;

int main()
{
    std::cerr << ts << "Warning!\n";
    std::cerr << ts << "Another warning!\n";
}
Run Code Online (Sandbox Code Playgroud)

所以我基本上定义了一个空类,使用全局声明并重载“<<”运算符。这感觉不对。像 timestamp() 这样的静态函数可能更适合,但我不太确定如何继续下去。我在网上找到的所有示例都使用了重载的“<<”运算符,但这样做通常更有意义,因为输出了一些类状态。我可以在本地创建一个 ostream 并在函数中返回它吗?

c++ timestamp operator-overloading ostream

7
推荐指数
2
解决办法
2124
查看次数

标签 统计

c++ ×1

operator-overloading ×1

ostream ×1

timestamp ×1