Сохраните тип sys_time как двоичный - PullRequest
1 голос
/ 24 марта 2020

В этом коде, который использует библиотеку date , безопасно ли хранить этот тип sys_time в двоичном формате? sys_time не POD, но здесь это выглядит как int64.

#include <fstream>
#include <date/date.h>
using namespace std;
using namespace date;

int main () {
    sys_time<chrono::nanoseconds> td;
    istringstream in1{"2017-01-01 22:24:1.000"};
    in1 >> date::parse ("%F %T", td);
    ofstream handle ("f.bin", ios::binary);
    handle.write (reinterpret_cast<char*> (&td), sizeof (td));
    return 0;
}

1 Ответ

1 голос
/ 24 марта 2020

Я бы сказал, да, за исключением вопросов с порядком байтов. Т.е. если вы сохраните его на машине с прямым порядком байтов и прочитаете ее с помощью машины с прямым порядком байтов, вы получите неправильный ответ.

Поскольку sys_time<nanoseconds> не является POD, вы также можете просто извлечь его встроенный POD значение и сохраните его как двоичный файл:

auto i = (td-sys_seconds{})/1ns;

или

auto i = td.time_since_epoch().count();

И тогда проблема, не связанная с POD, исчезнет. При чтении, просто:

sys_time<nanoseconds> td{nanoseconds{i}};

Я верю в C ++ 20, вы даже можете упростить до:

sys_time td{nanoseconds{i}};

хотя я еще не уверен, что это реализовано где-нибудь еще.

...