我刚接触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;
}
现在,要在C++中显式访问字段值,我可以这样做:
MyTool::Configuration config;
fstream input("config", ios::in | ios::binary);
config.ParseFromIstream(&input);
bool option1val = config.globalSettings().option1();
bool option2val = config.globalSettings().option2();
等等,这种方法在字段数量很大的情况下并不方便。
我是否可以通过迭代来获取字段的名称和类型?我知道有一些被称为描述符和反射的东西,但是我在尝试中没有成功。如果可能的话,能否给我提供示例代码?
谢谢!