也就是说,给定一个Descriptor
,是否可以构造相应的空Message
等同于在类上调用default_instance()
?我不需要实际的子类型,我只需要抽象Message
。
特别是我有兴趣枚举protobuf文件中所有Message
的实例,但使用API我只能枚举所有Descriptor
个。{/ p>
答案 0 :(得分:1)
您正在寻找的界面是MessageFactory
。给定Descriptor
,它可以为您提供该类型的默认实例。 (您可以在默认实例上调用message->New()
以获取新的可变实例。)
MessageFactory
有两种主要类型。如果您感兴趣的类型被编译到程序二进制文件中,那么您希望使用MessageFactory::generated_factory()
,它返回一个实例化编译类型的MessageFactory
。
如果没有编译类型,那么您将要创建一个DynamicMessageFactory
,它能够构建一个Message
,表现得像任意类型 - 但请注意,由于动态性,使用此实例将比编译类型慢(很像解释语言比编译语言慢)。