如何使用protobuf描述符读取枚举

时间:2018-07-05 14:53:57

标签: c++ enums protocol-buffers

假设我有一个.proto文件,其中包含:

message Foo {
  optional int32 x = 1;
  enum y {
    MOBILE = 0;
    HOME = 1;
  }
  optional string z = 3;
}

然后我有这段C ++代码,可以打印所有类型:

 const Reflection *refl = Foo.GetReflection(); 
 const Descriptor *desc = Foo.GetDescriptor();

 int fieldCount = desc->field_count();
 for(int i=0;i<fieldCount;i++){
     const FieldDescriptor *field = desc->field(i);
     cout  << field->name().c_str() << " the type is " 
           <<field->type_name()<< ": Type Number "<< field->type() <<endl;

     if(field->type()==FieldDescriptor::TYPE_ENUM){
         //do something
     }

则输出为:

    x the type is int32: Type Number 5
    z the type is string: Type Number 9

从输出中可以看到,该枚举被跳过了,我该如何获取字段描述符以解析该枚举呢?

1 个答案:

答案 0 :(得分:3)

您没有Enum类型的字段,仅定义了一个类型。因此,您对字段的迭代不会产生与枚举有关的任何信息。

如果您添加给定类型的字段,则会在此处看到您的枚举。