假设我有一条消息A,我想动态创建一条新消息B,它应该包含A中的所有字段和另外一个字段(不包含在A中),如何在protobuf中执行此操作?
答案 0 :(得分:1)
首先,查看descriptor.h
中定义的类型。这些“描述符”描述了Protobuf类型。您可以通过创建FileDescriptorProto
(基本上是.proto
文件的AST来动态创建一个;请参阅descriptor.proto
)然后使用DescriptorPool
将其“编译”为FileDescriptor
。反过来,它将为文件中定义的每种类型包含Descriptor
。
对于动态生成的类型,如果有Descriptor
,则可以使用DynamicMessage
动态构造该类型的消息对象。您可以使用Reflection
界面动态访问此消息的字段。