最近在实际业务中,我遇到了这样一类问题。
首先,我们定义了一个通用类,比如 message Feature
。然后,在一个大的特征分组中,我们定义了若干个特征。比如
1 | message FooGroup { |
但在实际使用中,我们需要根据配置文件,有筛选地选出其中的某几个来使用——比如选择使用 foo
和 baz
。为此,我们会传递 "foo"
和 "baz"
给函数 get_feature
,并期待它能返回 const Feature&
,分别装着 foo
和 baz
的常量引用。
查阅 Protobuf 的文档之后发现,使用描述器(Descriptor)、字段描述器(FieldDescriptor)和反射(Reflection)来实现该功能。