我有两个相同类型MyMSG的消息,我们将它们称为AB:

message MyMSG {
  repeated int msg_bucket = 1;
}

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

我应该使用哪个功能?

最佳答案

正如Marc Gravell♦指出的那样,没有自动执行此操作。

最简单的方法是,简单地将一个新的msg_bucket添加到您希望将其“合并”到(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());

07-24 14:41