如何将重复字段部分合并到消息中?

时间:2014-09-24 09:07:32

标签: c++ protocol-buffers protobuf-net

我有两条相同类型的消息MyMSG,我们会调用AB

message MyMSG {
  repeated int msg_bucket = 1;
}

我想将msg_bucket中的一个A.msg_bucket(0)只有一个,例如A)复制到B。不是MergeFrom而是部分合并。

我应该使用哪种功能?

2 个答案:

答案 0 :(得分:0)

为此,您应该创建一个单独的MyMSG实例,其要序列化的msg_bucket值,并序列化该实例。我所知道的库没有一个API,允许您指示现有列表中的谨慎项目以进行序列化("仅索引0,7和42,请")。

答案 1 :(得分:0)

正如Marc Gravell♦指出的那样,没有自动化。

最简单的方法就是简单地将新的msg_bucket添加到您想要的容器中,并且#34;合并"进入(B),然后分配相应的值,或者在你有消息而不是int的情况下进行复制。

另一种方法,将B序列化到容器中,创建一个新的MyMSG C,它只包含您要合并的字段,附加序列化该序列化B的新容器,最后从序列化数据中解析B

MyMSG A, B, C; //considered initialized as described above
std::vector<char> serializedContainer(500);
B.SerializeToArray(serializedContainer.data(), serializedContainer.size());
C.SerializeToArray(serializedContainer.data() + B.ByteSize(), serializedContainer.size() - B.ByteSize());
B.ParseFromArray(serializedContainer.data(), B.ByteSize() + C.ByteSize());