gpt4 book ai didi

c++ - boost 序列化多个对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:55 26 4
gpt4 key购买 nike

this one 稍微相关的问题和 this one .

基本上,我想在对象出现时对其进行序列化,就像日志文件一样,只是我想稍后将它们反序列化。这意味着我最初没有所有对象。

从之前的回答来看,如果打开同一个存档,似乎可以继续向存档中添加越来越多的对象。

但是我该如何提取它们呢?我是否需要在每次提取之前向前看并查看是否达到eof?我是否应该在保存例程中放置一个换行符,以便以后可以逐行读取输入(这可能只适用于二进制存档(可能还有文本),因为 xml 使用换行符,如果二进制可能使用偶尔换行)?如果到达文件末尾,>> 操作可能会抛出异常,我可以将它包装在一个无限循环中,并用 try catch 绕过它?

如果我想对不同种类的对象这样做,我会怎么做呢?也许有一个所有对象的枚举并在之前序列化枚举,并且在反序列化时有一个基于枚举的开关?

谢谢

最佳答案

你说的其实不是连载的重点。序列化旨在在编译时确定写入和读取的顺序时工作。甚至版本控制也是编译时的;您可以根据运行时版本序列化或不序列化一个值。保留顺序。

现在,您可以向输出添加一些标记,某种映射到类类型的整数值。也就是说,在将类写入流之前,您先写入一个表示该类的整数。然后您稍后阅读它并根据它决定接下来要序列化的类型。

但您将遇到的问题是,最终您会用完所有内容。而且序列化文件并没有真正说“就是这样”的方式。它们应该是编译时定义的,因此读取超过输入末尾被认为是用户错误。因此不容易支持处理任意数量的序列化数据。

同样,您可以在输出中写入一个特殊的标记,表示“到此结束。”

关于c++ - boost 序列化多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7111041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com