用于C ++的Python风格的酸洗?

时间:2010-11-10 21:07:55

标签: c++ python serialization boost pickle

有没有人知道在C ++中进行酸洗的“语言级”设施?我不想要像Boost序列化或Google Protocol Buffers这样的东西。相反,可以自动序列化类的所有成员(可以选择排除某些成员,因为它们不可序列化,或者因为我不想保存它们以供以后使用)。这可以通过在分析时执行额外操作来完成,这将生成用于处理自动序列化的代码。有没有人听说过这样的事情?

5 个答案:

答案 0 :(得分:7)

我不相信在没有运行时内省功能的语言中有任何方法可以做到这一点。

答案 1 :(得分:3)

或许是xml 数据绑定gsoap只是众多选择中的一种。您可以自动生成用于在数据结构和xml架构之间进行映射的代码。不确定设置它会比你提到的其他选项更容易

答案 2 :(得分:3)

  

可以自动生成的东西   序列化一个类的所有成员

这在C ++中是不可能的。 Python,C#,Java等。使用运行时内省来实现这一目标。你不能用C ++做到这一点,RTTI不够强大。

从本质上讲,C ++语言中没有任何内容可以让某人在运行时发现对象的成员变量。没有它,您无法自动序列化它们。

答案 3 :(得分:1)

标准的C ++序列化与<<和>>运算符,虽然你必须为你的每个类实现这些(听起来你不想这样做)。一些从业者说你应该总是实施这些操作员,当然,我们大多数人很少这样做。

答案 4 :(得分:0)

当我需要将结构保存到文件时,我有一个快速的方法就是将结构转换为char数组并将其写入文件。然后,当我想重新加载我的结构时,我将读取整个文件(以二进制模式),并将整个内容转换为我的struct的类型。足够简单并利用结构存储为内存中的连续块的事实。不过,我不希望这会与复杂的数据结构或指针一起使用,但需要深思熟虑。