想问下,C++,怎么把一个对象的内容保存在磁盘的文件里呢?

作者站长头像
站长
· 阅读数 5

我在用qt,比方说我设计了一个类.

class F
{
    QString str;
    int a;
    QDate date;
};

然后我的程序运作时需要一个这个类的数组,比方说

vector<F>v;

这么个数组.现在我希望,我能把这个数组内的F对象的内容写到磁盘上,这样我下次还能再用这份数据.但我总觉得自己的实现非常笨拙,我是把QDate类直接当作3个数字,QString当作一个字符串,用^当作成员之间的分隔符,用换行符当作元素之间的分隔符,打印出一个文件...感觉很笨拙,想问下有什么高明的手法吗?

回复
1个回答
avatar
test
2024-06-24

我觉得你是在说对象的序列化和反序列化。序列化就是把对象转成字符流或字节流以便传输或存储,反序列化就是从数据里恢复对象。在java里我们有专门的对象序列化接口,实现这个接口就可以将对象序列化成字节流写到文件里,然后也可以通过文件读取字节流再把它转成对象。除了java特有的序列化,我觉得可能很多语言包括python和c++等都可以用json作为序列化方案,就是把对象写到json文件里面,这样也有助于在异构的程序间传递数据。json文件的格式很好理解,比如你的对象就可以写成

{
  "str": "abcdefg",
  "a": 123456,
  "date": "2023-11-15"
}

在json里表示列表可以用中括号[],比如表示一个你的对象的列表可以是

[{
  "str": "abcdefg",
  "a": 123456,
  "date": "2023-11-15"
},
{
  "str": "vwxyz",
  "a": 98765,
  "date": "2023-11-14"
}]

我觉得c++大概率是有json序列化和反序列化库的,可以试着找一下?

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容