获取 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()
如何在编译成 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()