我有一个protobuf消息,定义了这样的内容
message Foo
{
oneof test //oneof field
{
int32 a = 1;
MM b = 2;
}
}
message MM
{
string str =1;
}
我如何反映protobuf中的其中一个
答案 0 :(得分:0)
在大多数情况下,您使用与以下方式相同的方式来处理消息:
message Foo
{
int32 a = 1;
MM b = 2;
}
其中一个对反射基本上是透明的,并且不影响连线格式。其效果是,只要设置了一个setter代码,就会自动清除其中一个的其他成员。
现在,如果您出于某种原因关心其中一个,则可以使用Descriptor::oneof_decl
来枚举Descriptor::FindOneofByName
和FieldDescriptor::containing_oneof
(如果您是从现场开始的, )。手持OneofDescriptor
,您可以找到它的名称并枚举其字段,仅此而已。