我有一个定义如下的 protobuf 消息
message Foo
{
oneof test //oneof field
{
int32 a = 1;
MM b = 2;
}
}
message MM
{
string str =1;
}
我如何反映在普罗托布夫提起的诉讼之一
在大多数情况下,处理消息的方式与处理消息的方式相同,没有:
message Foo
{
int32 a = 1;
MM b = 2;
}
其中一个对反射基本上是透明的,并且不会影响导线格式。它的效果是,生成的 setter 代码会在设置一个成员时自动清除其中一个成员的其他成员。
现在,如果您出于某种原因关心其中一个,那么Descriptor::oneof_decl
允许您枚举它们、Descriptor::FindOneofByName
和FieldDescriptor::containing_oneof
(如果您正在从现场开始工作(。有了OneofDescriptor
,您就可以找到它的名称并枚举其字段,仅此而已。