有人会这样做吗? 例如我喜欢:
std::cout << "something";
然后它应该打印“某事”之前的时间
答案 0 :(得分:6)
制作自己的流:)这应该有效:
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";
}
您可以将此类用于std::cout << obj
可以完成的每种类型,因此无需进一步的工作。
但请注意,时间将在每<<
之前写出,因此您无法轻易将它们链接起来。具有显式时间戳的另一种解决方案是:
class TimestampDummy {} timestamp;
ostream& operator<<(ostream& o, TimestampDummy& t) {
o << yourFancyFormattedTimestamp();
}
void func() {
cout << timestamp << "123 " << 456 << endl;
}
答案 1 :(得分:5)
您可以使用打印时间戳的简单函数,然后返回流以进行进一步打印:
std::ostream& tcout() {
// Todo: get a timestamp in the desired format
return std::cout << timestamp << ": ";
}
然后,只要您想要插入时间戳,就可以直接调用此函数而不是使用std::cout
:
tcout() << "Hello" << std::endl;
答案 2 :(得分:0)
这看起来像是家庭作业。你想要的东西:
std::cout << time << "something";
使用系统调用找到在系统上检索时间的方法。 然后你必须实现一个&lt;&lt;与系统相关的时间类/结构的运算符。
答案 3 :(得分:0)
ostream& printTimeWithString(ostream& out, const string& value)
{
out << currentTime() << ' ' << value << std::endl;
return out;
}
使用您最喜欢的Boost.DateTime输出格式生成当前时间。