【问题标题】:Python-style pickling for C++?C ++的Python风格酸洗?
【发布时间】:2011-05-08 03:19:06
【问题描述】:

有人知道在 C++ 中进行酸洗的“语言级别”工具吗?我不想要 Boost 序列化或 Google 协议缓冲区之类的东西。相反,可以自动序列化类的所有成员的东西(可以选择排除某些成员,或者因为它们不可序列化,或者因为我只是不想保存它们以备后用)。这可以在解析时通过额外的操作来完成,这将生成代码来处理自动序列化。有没有人听说过这样的事?

【问题讨论】:

    标签: c++ python serialization boost pickle


    【解决方案1】:

    我认为没有任何方法可以在没有运行时自省功能的语言中做到这一点。

    【讨论】:

    • 正如 Jacob 在下面所说的,我只是想知道是否有人见过可以解决此问题的编译时工具。我想外面没有这样的东西。
    • @RoniChoudhury 除非我弄错了,考虑到语言的限制,Boost 序列化做得很好。
    • @Marcin - Boost.Serialize 确实做得很好,但是您必须编写一个 serialize() 函数,它知道您要序列化的对象的详细信息。
    • @ferruccio 虽然这正是可以自动生成的东西。
    【解决方案2】:

    也许是 xml 数据绑定gsoap 只是众多选项之一。您可以自动生成数据结构和 xml 模式之间的映射代码。不确定设置是否比您提到的其他选项更容易

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          当我需要将结构保存到文件时,我开始工作的一种快速方法是将我的结构转换为char 数组并将其写入文件。然后当我想重新加载我的结构时,我会读取整个文件(以二进制模式),并将整个文件转换为我的结构类型。很简单,并利用了结构作为连续块存储在内存中的事实。不过,我不希望这适用于复杂的数据结构或指针,但值得深思。

          【讨论】:

          • 这既是一种陈旧且极其的序列化策略,在任何情况下都会严重失败,例如:不同的编译器标志、不同的编译器版本、不同的 CPU(不是甚至必然是不同的架构!),不同的操作系统......
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-03
          • 2011-04-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-27
          • 2011-11-22
          • 1970-01-01
          相关资源
          最近更新 更多