3 c++
有人会这样做吗?例如我喜欢:
std::cout << "something";
Run Code Online (Sandbox Code Playgroud)
然后它应该打印"东西"之前的时间
为此创建自己的流:)这应该工作:
class TimedStream {
public:
template<typename T>
TimedStream& operator<<(const T& t) {
std::cout << getSomeFormattedTimeAsString() << t << std::endl;
return *this;
}
};
TimedStream timed_cout;
void func() {
timed_cout << "123";
}
Run Code Online (Sandbox Code Playgroud)
您可以将此类用于std::cout << obj可以完成的每种类型,因此无需进一步的工作.
但请注意,时间将在每次之前写出<<,因此您不能轻易地将它们链接起来.具有显式时间戳的另一种解决方案是:
class TimestampDummy {} timestamp;
ostream& operator<<(ostream& o, TimestampDummy& t) {
o << yourFancyFormattedTimestamp();
}
void func() {
cout << timestamp << "123 " << 456 << endl;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用一个简单的函数来打印时间戳,然后返回流以进行进一步打印:
std::ostream& tcout() {
// Todo: get a timestamp in the desired format
return std::cout << timestamp << ": ";
}
Run Code Online (Sandbox Code Playgroud)
然后std::cout,无论何时要插入时间戳,都可以调用此函数而不是直接使用:
tcout() << "Hello" << std::endl;
Run Code Online (Sandbox Code Playgroud)