protobuf,如何在protobuf消息中遍历所有集合字段,我不知道详细信息?(C++)

protobuf, How to travel all set fields in a protobuf message which I dont know in detail?(C++)

本文关键字:protobuf 我不知道 字段 详细信息 C++ 集合 消息 遍历      更新时间:2023-10-16

我想旅行的字段已设置在未知的protobuf消息中。我试过

for (int i = 0; i < chk_des->field_count(); ++i) {
const ::google::protobuf::FieldDescriptor* chk_field = chk_des->field(i);
(do somethin...)
}

它只是穿越整个领域。我想去野外旅行。

检索反射对象:

virtual const Reflection * 
Message::GetReflection() const

获取此消息的反射接口,该接口可用于动态地读取和修改消息的字段(换句话说,而不知道编译时的消息类型(。

之后,您可以使用例如:

virtual bool Reflection::HasField(const Message & message, const FieldDescriptor * field) const = 0

检查是否设置了给定的非重复字段。

请注意,您还需要传递代码片段中的字段描述符。

const FieldDescriptor * 
Descriptor::field(
int index) const

按索引获取字段,其中0<=索引<field_count((。

它们按照.proto文件中定义的顺序返回。

相关文章: