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

How to partly merge repeated field into message?

本文关键字:合并 消息 字段部      更新时间:2023-10-16

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

message MyMSG {
  repeated int msg_bucket = 1;
}

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

我应该使用哪个功能?

饰演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());

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