Я бы хотел добавить временную метку к определенным выходным данным в ostreams std :: cout / std :: cerr, без использования модифицированных стандартных потоков, например:
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";
}
Так что я Я в основном определяю пустой класс, используя глобальное объявление и перегружая оператор <<. Это неправильно. Возможно, лучше подойдет функция stati c, такая как timestamp (), но я не совсем уверен, как это сделать go. Во всех примерах, которые я нашел в Интернете, использовался перегруженный оператор «<<», но обычно это имело больше смысла, поскольку выводилось некоторое состояние класса. Могу ли я локально создать ostream и вернуть его в функцию? </p>