Я новичок в protobuf, и я застрял в простой задаче: мне нужно перебирать поля сообщения и проверять его тип. Если тип - это сообщение, я буду делать то же самое рекурсивно для этого сообщения.
Например, у меня есть такие сообщения:
package MyTool;
message Configuration {
required GloablSettings globalSettings = 1;
optional string option1 = 2;
optional int32 option2 = 3;
optional bool option3 = 4;
}
message GloablSettings {
required bool option1 = 1;
required bool option2 = 2;
required bool option3 = 3;
}
Теперь, чтобы явно получить доступ к значению поля в С++, я могу сделать это:
MyTool::Configuration config;
fstream input("config", ios::in | ios::binary);
config.ParseFromIstream(&input);
bool option1val = config.globalSettings().option1();
bool option2val = config.globalSettings().option2();
и т.д. Этот подход не подходит в случае, если у него большое количество полей.
Могу ли я сделать это с помощью итерации и получить имя и тип поля? Я знаю, что есть дескрипторы типа и несколько называются отражениями, но у меня не было успеха в моих попытках. Может ли кто-нибудь дать мне пример кода, если это возможно?
Спасибо!