在这个使用日期库的代码中,以二进制格式存储这种类型的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;
}
我会同意,除了endian问题。也就是说,如果你把它保存在大端序机器上,然后用小端序机器读取,你会得到错误的答案。
由于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}};
尽管我还不确定它是否在任何地方实现。