也就是说,给定Descriptor
,是否可以构造等效的空Message
等效于在类上调用default_instance()
?我不需要实际的子类型,只需要抽象的Message
。
特别是,我对枚举protobuf文件中所有Message
的实例感兴趣,但是使用API只能枚举所有Descriptor
的实例。
最佳答案
您要查找的界面是MessageFactory
。给定Descriptor
,它可以为您提供该类型的默认实例。 (您可以在默认实例上调用message->New()
以获得新的可变实例。)MessageFactory
主要有两种。如果您感兴趣的类型被编译到程序二进制文件中,则您想使用MessageFactory::generated_factory()
,它返回一个MessageFactory
实例化已编译的类型。
如果未编译这些类型,则需要创建一个DynamicMessageFactory
,它可以像任意类型一样构造一个Message
,但是请注意,由于具有动态性质,因此使用此实例将慢于编译类型(很像解释型语言比编译型语言慢)。