C++中合并Protobuf子消息到主消息字段报错,求正确实现方式
Protobuf合并子消息到主消息字段的正确方法
直接调用main_message_proto.MergeFrom(submessage_proto)报错的原因是,MergeFrom仅支持同类型消息的合并,而MainMessage和SubMessage属于不同的消息类型,无法直接合并。
正确的做法是针对MainMessage中对应的foo_3字段进行合并,代码示例如下:
proto::MainMessage main_message_proto; proto::SubMessage submessage_proto; // 填充submessage_proto的内容(省略具体逻辑) // 正确合并:获取foo_3字段的可变引用后调用MergeFrom main_message_proto.mutable_foo_3()->MergeFrom(submessage_proto);
补充说明
mutable_foo_3()方法会返回SubMessage类型的可变指针(因为foo_3是optional类型),此时调用同类型的MergeFrom就可以完成内容合并。- 如果
foo_3字段之前未初始化,mutable_foo_3()会自动创建一个默认的SubMessage实例,再执行合并操作。
内容的提问来源于stack exchange,提问作者A. Fenzry
相关产品推荐
相关产品推荐

