У меня есть сообщения protobuf, определенные как ниже.Мне нужно найти тип сообщения по имени атрибута.Например, если вход «cfgMsg», выход должен быть ConfigMsg или CfgServerMsg.ConfigMsg (полное имя).
message CfgServerMsg {
string name = 1;
ConfigMsg cfgMsg = 2;
}
message ConfigMsg {
string cfgName = 1;
uint32 msgId = 2;
}
У меня есть код ниже.Однако это работает для четко определенных типов, таких как string, int, float и т. Д., А для сообщений просто выводит «message» в качестве вывода.
Я удалил некоторый код и представил только то, что имеет отношение к этому вопросу.Так что это явно не полный код.
google::protobuf::Message *modObj = new ModObj();
const google::protobuf::Descriptor *outModDesc
= modObj->GetDescriptor();
const Reflection *outModRefl = modObj->GetReflection();
const FieldDescriptor *field;
// Loop to iterate over all the fields
{
field = outModDesc->FindFieldByName(tmp_name);
std::string type = field->type_name();
std::cout << "Type:" << type << std::endl;
}
Вывод: Тип: строка Тип: message
Тем не менее, я хочу получить фактический тип сообщения "ConfigMsg" вместо просто"сообщение".Есть ли какой-либо такой API, доступный от protobuf?
Я тщательно проверил эту страницу https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor#FileDescriptor.name.details, но не смог найти ничего полезного для этого.
Если кто-то совершил подобное или знает что-то об этом, это было бы полезно.
Спасибо,