假设我有一个.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
从输出中可以看到,该枚举被跳过了,我该如何获取字段描述符以解析该枚举呢?
答案 0 :(得分:3)
您没有Enum类型的字段,仅定义了一个类型。因此,您对字段的迭代不会产生与枚举有关的任何信息。
如果您添加给定类型的字段,则会在此处看到您的枚举。