不知道该如何反思

时间:2020-05-17 11:07:45

标签: c++11 protocol-buffers

我有一个protobuf消息,定义了这样的内容

message Foo
{
 oneof test  //oneof field
    {
        int32 a = 1;
        MM b = 2;
    }
}

message MM
{
   string  str =1;
}

我如何反映protobuf中的其中一个

1 个答案:

答案 0 :(得分:0)

在大多数情况下,您使用与以下方式相同的方式来处理消息:

message Foo
{
  int32 a = 1;
  MM b = 2;
}

其中一个对反射基本上是透明的,并且不影响连线格式。其效果是,只要设置了一个setter代码,就会自动清除其中一个的其他成员。

现在,如果您出于某种原因关心其中一个,则可以使用Descriptor::oneof_decl来枚举Descriptor::FindOneofByNameFieldDescriptor::containing_oneof(如果您是从现场开始的, )。手持OneofDescriptor,您可以找到它的名称并枚举其字段,仅此而已。

相关问题