我有一个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方法,但它替换了不添加的可选字段。
答案 0 :(得分:0)
协议缓冲区不是为这种操纵而构建的。问题是,如果您的消息结构很浅,那么就可以了,如果您不确定每次需要更改消息结构时都会造成问题的消息结构。
MergeFrom非常有用,如果您有2条消息,并且想要将它们的结构连接在一起,但是您不希望这样做。
您可能会有一个重复字段(std vector)来存储元素并对其进行汇总。