Protobuf 获取field的类型

2023-08-29  本文已影响0人  Walk_In_Jar
message  aa
{
     int32 key = 1 ;
     string Name = 2 ;
}
message bb {
    repeated aa filedaa= 1;
}

在操作message bb时

获取message bb第一个变量

const FieldDescriptor* fieldDescriptor = descriptor_->field(0);

获取fieldDescriptor (filedaa)的类型

if(fieldDescriptor->type() == FieldDescriptor::TYPE_MESSAGE )
{
    //do
}

获取filedaa cpp_type

fieldDescriptor->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE

获取filedaa名称

fieldDescriptor->name() == "filedaa"

判断filedaa是否是repeated类型、map类型

if(fieldDescriptor->is_repeated()){
    if(fieldDescriptor->is_map())
        {
          //repeated is map
        }
        else
        {
        //not  map
        }
}

获取 filedaa的类型aa

    fieldDescriptor->message_type()
    //验证  
    fieldDescriptor->message_type()->name()=="aa"

查找message aa 是否有字段"key"

 if( fieldDescriptor->message_type()->FindFieldByName("key ") )
{
   //do
}
上一篇下一篇

猜你喜欢

热点阅读