在C++中将protobuf字段复制到另一个protobuf

ttp71kqs  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(386)

我们有以下protobuf定义

message SubMessage {
  optional string var_1 = 1;

  repeated string var_2 = 2;
}

message MainMessage {
  repeated Foo1 foo_1 = 1;

  repeated Foo2 foo_2 = 2;

  optional SubMessage foo_3 = 6;
}

尝试将此子原型合并为主原型的一部分时

proto::MainMessage main_message_proto;
 proto::SubMessage submessage_proto;

 ...

 main_message_proto.MergeFrom(submessage_proto);

出现以下错误:
Tried to merge messages of different types
将子消息的信息合并为主消息的字段的正确函数是什么?

ivqmmu1c

ivqmmu1c1#

MergeFrom合并两个相同类型的消息。例如,如果一个MainMessage设置了foo_1字段,另一个设置了foo_2字段,则可以将它们合并在一起,结果将是同时设置了foo_1foo_2字段的消息。
但这并不是你现在看到的,你有一个MainMessage,想把它的SubMessage字段和另一个SubMessage合并,为此你需要在foo_3上调用MergeMessage

main_message_proto.mutable_foo_3()->MergeFrom(submessage_proto);

如果foo_3当前为空,则不需要使用MergeFrom,在这种情况下,简单赋值即可:

*main_message_proto.mutable_foo_3() = submessage_proto;

相关问题