美文网首页
Protobuf 获取field的类型

Protobuf 获取field的类型

作者: Walk_In_Jar | 来源:发表于2023-08-29 10:52 被阅读0次
    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
    }
    

    相关文章

      网友评论

          本文标题:Protobuf 获取field的类型

          本文链接:https://www.haomeiwen.com/subject/cqbnmdtx.html