每次调用std :: cout时打印时间

时间:2010-11-15 17:35:31

标签: c++

有人会这样做吗? 例如我喜欢:

std::cout << "something";
然后它应该打印“某事”之前的时间

4 个答案:

答案 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输出格式生成当前时间。