2016-02-18 5 views
0

Как получить номер тега определенного поля из объекта protobuf после компиляции в класс C++?Получение номера тега в google protobuf

Рассмотрим ниже сообщение пример Protobuf и я обобщил это сообщение, чтобы получить соответствующий заголовок C++ для Person класс

Файл: 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("[email protected]"); 

Теперь я хочу получить номер метки каждого поля i n сообщение человека, как показано ниже:

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

Посмотрите на Descriptor. Например (непроверенный, просто чтобы получить идею):

Person::descriptor()->FindFieldByName("id")->number() 
Смежные вопросы