我有两个相同类型MyMSG
的消息,我们将它们称为A
和B
:
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());