Каков правильный способ сохранения экземпляров std:: chrono time_point и затем их повторного чтения в другой экземпляр того же типа?
typedef std::chrono::time_point<std::chrono::high_resolution_clock> time_point_t;
time_point_t tp = std::chrono::high_resolution_clock::now();
serializer.write(tp);
.
.
.
time_point_t another_tp;
serializer.read(another_tp);
Призывы к записи/чтению предполагают, что экземпляр типа time_point_t может быть каким-то образом преобразован в представление байтов, которое затем может быть записано или прочитано с диска или сокета и т.д.
Возможное решение, предложенное Alf, выглядит следующим образом:
std::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();
//Generate POD to write to disk
unsigned long long ns0 = t0.time_since_epoch().count();
//Read POD from disk and attempt to instantiate time_point
std::chrono::high_resolution_clock::duration d(ns0)
std::chrono::high_resolution_clock::time_point t1(d);
unsigned long long ns1 = t1.time_since_epoch().count();
if ((t0 != t1) || (ns0 != ns1))
{
std::cout << "Error time points don't match!\n";
}
Примечание.. Приведенный выше код имеет ошибку, поскольку конечный момент времени, указанный в момент времени, не соответствует оригиналу.
В случае старого стиля time_t, как правило, просто записывается весь объект на диск на основе его sizeof, а затем считывается обратно таким же образом. Короче говоря, что эквивалентно новым типам std:: chrono