【问题标题】:Working with protobuf and POCOs in C++在 C++ 中使用 protobuf 和 POCO
【发布时间】:2013-08-02 02:10:48
【问题描述】:

我想在我正在处理的 C++ 项目中使用 protobuf。 但是,我不喜欢使用 protoc 创建的自动生成的类,而是更喜欢坚持使用我已经拥有的 POCO。这是因为 POCO 已经在代码的其他部分使用,我希望以后能够轻松地切换序列化机制。但是在 POCO 和 protobuf 消息类之间手动编写转换器似乎是乏味和错误的。

我想知道是否有一种方法可以使用 protobuf 创建一个序列化程序 - 一个自动生成的类,它能够序列化和反序列化我的 POCO,而不会打扰我。

谢谢。

【问题讨论】:

  • 您可以直接将您的 POCO 写入网络/磁盘吗?当然,如果它们包含指针,这将不起作用....
  • 我的 POCO 包含原始类型、字符串、指向其他 POCO 的指针和上述的向量。指针也需要处理(例如,通过序列化指向的对象并使用一些 id 引用它)。直接写就是序列化,我可以手动做,我只是想办法避免。
  • Avro (avro.apache.org) 可能更接近您想要的(或者在 java 中)。此外,使用 Protocol Buffers,您不仅限于官方版本;您可以编写自己的代码生成器。列出了另一个 C/C++ 版本sourceforge.net/projects/spbc/files/spbc/spbc-1.0.1。它在 4 年内没有更改,因此将过时
  • code.google.com/p/protobuf/wiki/ThirdPartyAddOns中列出了其他c版本的protocol buffers
  • Bruce Martin - 正如您所说,Java 无关紧要。编写自己的代码生成器正是我希望避免的,也是我提出这个问题的原因。简单的 Protobuf 似乎不相关(或记录或维护),我在 3rd 方插件页面中看不到任何有用的东西。还是谢谢。

标签: c++ protocol-buffers


【解决方案1】:

首先,您可能更喜欢Cap'n Proto,它是由 Google 的一位前 Google Protocol Buffer 维护者创建的。无论如何,值得研究。

但除此之外,您确实需要考虑为什么您要使用 Google 协议缓冲区。

如果你想实现向前和向后兼容,并且能够打开,然后编辑,然后保存一个可能是其他人创建的对象,使用不同版本的协议缓冲区声明,然后发送到另一个人的声明版本甚至不同……那么您只需要咬紧牙关,使用 Google Protocol Buffer Compiler 生成的 C++。

它真的不仅仅是一种序列化格式。它经过专门设计,可让您轻松使用不同版本的序列化,随着时间的推移。

如果您不需要这种灵活性,并且不喜欢生成的代码,您可能需要考虑使用不同的序列化工具。

【讨论】:

  • 嘿。谢谢。 Capn'n Proto 看起来很有趣,我会看看它。它与手头的工作无关(不支持 Java,产品太新而无法用于生产等)。由于以下原因,我想使用 protobuf - 它快速紧凑,并且继承了 C++ 和 Java 支持。版本不是真正的问题。事实上,我不介意生成的代码——我根本不在乎生成了什么。我只想让生成的代码在我的 POCO 或 POJO 上工作。我可以自己写这样的东西,我只是想确保这还没有完成。
  • Google Protocol Buffers 将始终生成代码(这就是您需要关心的原因),并且永远不会在您的 POCO 或 POJO 上工作。所以,它可能不适合你。我不知道有任何序列化库可以在您的 POCO 上运行。
猜你喜欢
  • 2013-12-12
  • 2015-10-23
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
相关资源
最近更新 更多