动态创建新的protobuf消息

时间:2014-12-26 08:15:55

标签: c++ dynamic protocol-buffers

假设我有一条消息A,我想动态创建一条新消息B,它应该包含A中的所有字段和另外一个字段(不包含在A中),如何在protobuf中执行此操作?

1 个答案:

答案 0 :(得分:1)

首先,查看descriptor.h中定义的类型。这些“描述符”描述了Protobuf类型。您可以通过创建FileDescriptorProto(基本上是.proto文件的AST来动态创建一个;请参阅descriptor.proto)然后使用DescriptorPool将其“编译”为FileDescriptor。反过来,它将为文件中定义的每种类型包含Descriptor

对于动态生成的类型,如果有Descriptor,则可以使用DynamicMessage动态构造该类型的消息对象。您可以使用Reflection界面动态访问此消息的字段。