Protobuf反射机制使用
使用Protobuf的反射机制读取/写入元素的值
#include <cstdio>
#include <google/protobuf/descriptor.h>
#include "test_message.pb.h"
using test_pb::TestRaw;
using ::google::protobuf::Descriptor;
using ::google::protobuf::Reflection;
using ::google::protobuf::FieldDescriptor;
int main(int argc, char** argv) {
TestRaw* test_raw = new(std::nothrow) TestRaw();
if (test_raw == NULL) {
printf("allocate test raw failed\");
return -1;
}
const Descriptor* descriptor = test_raw->GetDescriptor();
const Reflection* reflection = test_raw->GetReflection();
int field_count = descriptor->field_count();
printf("field_count:%d\", field_count);
const FieldDescriptor* item1 = descriptor->FindFieldByNumber(1);
if (item1->type() == FieldDescriptor::TYPE_UINT64) {
printf("uint64 type\");
reflection->SetUInt64(test_raw, item1, 100);
printf("item1:%d\", test_raw->item1());
}
return 0;
}
pb文件内容
package test_pb;
message TestRaw {
optional uint64 item1 = 1;
optional uint64 item2 = 2;
optional string item3 = 3;
};