如何在编译成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
是否可以获取标签号,如果是这样的话?
答案 0 :(得分:1)
看看Descriptor
。例如(未经测试,只是为了得到这个想法):
Person::descriptor()->FindFieldByName("id")->number()