使用Protocol Buffers检索带有字段描述符的父消息中的字段名



是否有可能与谷歌协议缓冲区检索字段名称 (不是字段类型)的父消息通过使用c++中的描述符?

考虑以下最小示例:

message MessageHeader {
  string addressee = 1;
}
message Message {
  MessageHeader header = 1;
}

我想用以下函数检索字符串"header.addresse":

std::string createFieldQueryFrom(
    const google::protobuf::FieldDescriptor* const descriptor)
{
  // TODO(wolters): The descriptor for the containing FIELD is required. Is
  // there a way to retrieve it?
  //
  // containing_descriptor->name() returns "Message", what I want is
  // "header"!
  const google::protobuf::Descriptor* containing_descriptor{
      descriptor->containing_type()};
  // TODO(wolters): Add recursion if able to get the actual attribute name of
  // the containing FIELD.
  return "";
}
  1. 这是可能的吗?或者google::protobuf::FieldDescriptor实例不能提供完成该任务所需的信息吗?
  2. 如果答案为1。is no:这是可能的吗(如果是,你能给我一个例子吗)?

FieldDescriptor::name()(例如在您的示例中descriptor->name())返回字段的名称。但是,这只是"header"或"addressee",而不是像"header.addressee"那样的完整路径。

没有办法从单个FieldDescriptor生成完整的路径,因为它不包含足够的信息。类型MessageHeader可以在许多不同的地方使用(不仅仅是在Message.header中),因此仅给定addressee的描述符,无法告诉您正在寻找哪个使用站点。

如果您希望在遍历消息时跟踪字段的路径,则需要通过维护stack<FieldDescirptor*>或类似的方法手动完成。

相关内容

  • 没有找到相关文章

最新更新