protobuf,如何在我不知道的protobuf消息中遍历所有设置的字段?(C ++)

时间:2018-08-02 06:25:02

标签: c++ protocol-buffers

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

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

它只是在所有领域旅行。我想去旅行的领域。

1 个答案:

答案 0 :(得分:0)

您获取反射对象:

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 <= index      

这些文件将按照在.proto文件中定义的顺序返回。