Сохранение экземпляров std :: chrono time_point

Как правильно сохранить экземпляры 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 может быть каким-то образом преобразован в байтовое представление, которое затем может быть записано или прочитано с диска или сокета и т. Д.

Возможное решение, предложенное Альфом, таково:

   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, один обычно просто записывает всю сущность на диск в зависимости от ее размера, а затем считывает ее обратно тем же способом. Короче, что будет эквивалентно для новых типов std :: chrono?

Ответы на вопрос(2)

Ваш ответ на вопрос