Google 协议缓冲区和 stl 向量、映射和提升共享指针

Posted

技术标签:

【中文标题】Google 协议缓冲区和 stl 向量、映射和提升共享指针【英文标题】:Google protocol buffers and stl vectors, maps and boost shared pointers 【发布时间】:2011-02-03 08:06:59 【问题描述】:

google 协议缓冲区是否支持 stl 向量、映射和 boost 共享指针?我有一些对象大量使用stl containers,例如mapsvectorsboost::shared_ptr。我想使用 google 协议缓冲区将这些对象通过网络序列化到不同的机器。

我想知道 google protobuf 是否支持这些容器?另外,如果我改用apache thrift,会更好吗?我只需要序列化/反序列化数据,不需要 apache thrift 提供的网络传输。 apache thrift 也没有适当的文档让我失望。

【问题讨论】:

这里我们开始:thrift.apache.org/docs,还可以找到一些其他信息in the (old) wiki 【参考方案1】:

协议缓冲区直接 有意处理少量构造;向量很好地映射到“重复”元素类型,但是这是如何在 C++ 中呈现的是通过“添加”方法 - 你不(AFAIK)只是给它一个向量。有关详细信息,请参阅“重复嵌入消息字段”here。

重新映射;没有内置机制,但是键/值对很容易在 .proto 中表示(通常是键 = 1,值 = 2),然后通过“重复”处理。

shared_ptr itself 在序列化文件中似乎没有什么意义。但是 object 可以(大概)作为消息处理。

请注意,在 google C++ 版本中会生成 DTO 层,因此您可能需要在它们与任何现有对象模型之间进行映射。这通常很简单。

对于某些语言/平台,有针对现有对象模型的 protobuf 变体。

(抱歉,我无法评论 thrift - 我不熟悉它)

【讨论】:

以上是关于Google 协议缓冲区和 stl 向量、映射和提升共享指针的主要内容,如果未能解决你的问题,请参考以下文章

带有向量作为键的 STL 映射

Visual C++ 2010 中的 STL 映射实现和线程安全

将向量映射到特定范围

如何遍历STL映射(查找所有可能的对)

std::set 与向量或映射的优势

在 Windows 中使用 MinGW 的 Google 协议缓冲区