也就是说,给定Descriptor,是否可以构造等效的空Message等效于在类上调用default_instance()?我不需要实际的子类型,只需要抽象的Message

特别是,我对枚举protobuf文件中所有Message的实例感兴趣,但是使用API​​只能枚举所有Descriptor的实例。

最佳答案

您要查找的界面是MessageFactory。给定Descriptor,它可以为您提供该类型的默认实例。 (您可以在默认实例上调用message->New()以获得新的可变实例。)

MessageFactory主要有两种。如果您感兴趣的类型被编译到程序二进制文件中,则您想使用MessageFactory::generated_factory(),它返回一个MessageFactory实例化已编译的类型。

如果未编译这些类型,则需要创建一个DynamicMessageFactory,它可以像任意类型一样构造一个Message,但是请注意,由于具有动态性质,因此使用此实例将慢于编译类型(很像解释型语言比编译型语言慢)。

09-19 10:39