【发布时间】:2013-01-25 03:04:20
【问题描述】:
有没有办法以通用和可移植的方式识别类型以进行序列化?我知道std::type_index 和std::type_info 是平台相关的,不能用于序列化。
一种方法是在std::type_index 和一个“类型信息”之间建立一个映射并序列化“类型信息”,但这会减慢序列化速度。
有什么标准的方法吗?
PS:我想学习如何进行高效的序列化,我不想使用库。
【问题讨论】:
-
恐怕如果你不打算使用图书馆,那么你会发现自己在写一个。 C++ 在没有反射的情况下让它变得很困难。
-
即使你不想使用一个库,你也可以从查看一个库的编写方式开始,例如Boost.Serialization.
-
这取决于你所说的“便携”。如果您要使用写入数据的相同二进制文件来读取数据,则可以直接使用
type_index。如果性能那么很关键,您始终可以这样做并使用单独的函数(可能在单独的进程中运行)来收集原始数据并以更明智的方式对其进行序列化。 -
@KerrekSB 我想使用相同的库,但在不同的平台上。我想在 PC 上编写文件并在不同的移动平台上读取它们。我认为类型特征是最好的解决方案——从真实类型中获取“可序列化类型”并从“可序列化类型”中获取真实类型
-
非平凡类型无论如何都必须支持序列化。因此,只需为每个此类类型注册一个唯一 ID,例如 UUID。
标签: c++ serialization c++11