将sys_time类型另存为二进制类型



在这个使用日期库的代码中,以二进制格式存储这种类型的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}};

尽管我还不确定它是否在任何地方实现。

相关内容

  • 没有找到相关文章

最新更新