我想向 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 并在函数中返回它吗?