如何聚合protobuf消息

How to aggregate protobuf message

本文关键字:消息 protobuf 何聚      更新时间:2023-10-16

我有一个protobuf消息,如下所示:

message sample {
optional int32 value1 = 1;
optional int32 value2 = 2;
...
optional int64 valuen = n;
}

有很多对象,我想聚合这些对象。通常的方法是:

void aggregate(ample& msg1, sample& msg2) {
msg1.set_value1(msg1.value1() + msg2.value1());
msg1.set_value1(msg1.value2() + msg2.value2());
...
msg1.set_value1(msg1.valuen() + msg2.valuen());
}

有什么方法可以简化代码吗?我尝试了MergeFrom方法,但它替换了可选字段而不是添加。

协议缓冲区不是为这种操作而构建的。问题是,如果你有一个浅层次的消息结构,那么它是可以的,如果你不确定每次你必须更改消息结构时会产生问题的消息结构。

如果你有两条消息,并且你想把它们的结构连接在一起,但你不想这样,MergeFrom是很好的。

您可以使用一个重复字段(stdvector(来存储元素并聚合它们。