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
,例如maps
、vectors
和boost::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 向量、映射和提升共享指针的主要内容,如果未能解决你的问题,请参考以下文章