在google protobuf中获取字段的标记号

时间:2016-02-18 11:15:41

标签: protocol-buffers

如何在编译成C ++类后从protobuf对象中获取特定字段的标记号?

考虑以下示例protobuf消息,我编译了此消息以获取 Person

的相应C ++标头

文件: person.proto

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

在我的C ++代码中

Person *foo = new Person();
foo->set_id(123);
foo->set_name("bar");
foo->set_email("baz@qux.com");

现在我想获取person消息中每个字段的标记号,如下所示

int tag_id = foo->some_method_to_get_tag_number_of_id(); \\tag number of id is 1
int tag_name = foo->some_method_to_get_tag_number_of_name(); \\tag number is 2
int tag_email = foo->some_method_to_get_tag_number_of_email(); \\tag number is 3

是否可以获取标签号,如果是这样的话?

1 个答案:

答案 0 :(得分:1)

看看Descriptor。例如(未经测试,只是为了得到这个想法):

Person::descriptor()->FindFieldByName("id")->number()