Google 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 "";
}
google::protobuf::FieldDescriptor
实例没有提供完成该任务所需的信息?答案 0 :(得分:1)
FieldDescriptor::name()
(例如,示例中的descriptor->name()
)会返回字段的名称。但是,这只是"标题"或"收件人",而不是像" header.addressee"这样的整个路径。
由于它没有包含足够的信息,因此无法从单个FieldDescriptor
生成整个路径。类型MessageHeader
可以在许多不同的地方使用(不仅仅在Message.header
中),因此仅根据addressee
的描述符,无法确定您使用的是哪个用户网站寻找。
如果您想在浏览邮件时跟踪字段的路径,则需要通过维护stack<FieldDescirptor*>
或类似邮件来手动执行此操作。