【发布时间】:2020-05-10 00:56:41
【问题描述】:
我想为 std::cout / std::cerr ostreams 的某些输出添加时间戳,而不使用修改后的标准流,如下所示:
std::cerr << timestamp << "Warning!\n";
左右:
std::cerr << timestamp() << "Warning!\n";
输出应如下所示:
[2020-01-23 17:40:15 CET] Warning!
但我真的对自己的想法不满意:
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";
}
所以我基本上定义了一个空类,使用全局声明并重载“
【问题讨论】:
-
使用无非是标签的类型让
operator<<做一些特别的事情一点都没错。你看有什么缺点吗?为什么你认为它是错误的? -
我同意这是一个非常聪明的解决您的问题的方法。只需标记
tsconstexpr
标签: c++ timestamp operator-overloading ostream