我有两条相同类型的消息MyMSG
,我们会调用A
和B
:
message MyMSG {
repeated int msg_bucket = 1;
}
我想将msg_bucket
中的一个A.msg_bucket(0)
(只有一个,例如A
)复制到B
。不是MergeFrom
而是部分合并。
我应该使用哪种功能?
答案 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());