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
}