获取 google protobuf 中字段的标记号

Getting tag number of a field in google protobuf

如何在编译成 C++ class 后从 protobuf object 获取特定字段的标记号?

考虑下面的示例 protobuf 消息,我编译了这条消息以获得相应的 C++ header for Person class

文件: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 message中每个字段的tag number,如下图

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

是否可以获取标签号,如果可以如何获取?

看看Descriptor。例如(未经测试,只是为了理解):

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