谷歌协议缓冲区是否支持stl向量,映射和提升共享指针?我有一些对象大量使用stl containers
maps
,vectors
和boost::shared_ptr
。我想使用谷歌协议缓冲区将这些对象通过网络序列化到不同的机器。
我想知道google protobuf是否支持这些容器?另外,如果我改用apache thrift
,它会更好吗?我只需要序列化/反序列化数据,不需要apache thrift提供的网络传输。另外,没有适当文档的apache thrift会让我失望。
答案 0 :(得分:8)
协议缓冲区直接处理故意少量的结构;向量很好地映射到“重复”元素类型,但如何在C ++中呈现是通过“添加”方法 - 你不(AFAIK)只是将它传递给一个向量。有关详细信息,请参阅“重复嵌入消息字段”here。
重新制作地图;没有内置机制,但键/值对很容易用.proto表示(通常是key = 1,value = 2),然后通过“重复”来处理。
shared_ptr 本身似乎在序列化文件中没什么意义。但对象可能会被处理(推测)为消息。
请注意,在Google C ++版本中会生成DTO图层,因此您可能需要在它们与任何现有对象模型之间进行映射。这通常是微不足道的。
对于某些语言/平台,有针对现有对象模型的protobuf变体。
(对不起,我不能评论节俭 - 我不熟悉它)