Как использовать дескриптор protobuf для чтения перечислений - PullRequest
0 голосов
/ 05 июля 2018

Допустим, у меня есть файл .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 голосов
/ 05 июля 2018

У вас нет поля типа Enum, вы только определили тип. Из-за этого ваша итерация по полям не дает ничего связанного с перечислением.

Если вы добавите поле заданного типа, вы увидите там его перечисление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...