简体   繁体   中英

print time on each call to std::cout

How would someone do that? for example I do like:

std::cout << "something";

then it should print the time before "something"

Make your own stream for that :) This should work:

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";
}

You'd be able to use this class for every type for which std::cout << obj can be done, so no further work is needed.

But please note that the time will be written before every << , so you cannot chain them easily. Another solution with explicit timestamp is:

class TimestampDummy {} timestamp;

ostream& operator<<(ostream& o, TimestampDummy& t) {
    o << yourFancyFormattedTimestamp();
}

void func() {
    cout << timestamp << "123 " << 456 << endl;
}

You could use a simple function that prints the timestamp and then returns the stream for further printing:

std::ostream& tcout() {
  // Todo: get a timestamp in the desired format
  return std::cout << timestamp << ": ";
}

You would then call this function instead of using std::cout directly, whenever you want a timestamp inserted:

tcout() << "Hello" << std::endl;

This looks like homework. You want something in the line of:

std::cout << time << "something";

Find a way the retrieve the time on your system, using a system call. Then you'll have to implement a << operator for your system-dependent time class/struct.

ostream& printTimeWithString(ostream& out, const string& value)
{
  out << currentTime() << ' ' << value << std::endl;
  return out;
}

Generate current time using your favourite Boost.DateTime output format.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM