概要
https://github.com/yxinyi/DynamicProtoBufParse
本文章是使用protobuf
反射的一个总结,假定阅读者已经会搭建proto
环境并且已会生成.pb.h
文件,阅读完本篇,你会得到以下几个问题的解决方案的参考:
-
Proto 的正常使用
-
对定义的任意结构进行遍历
-
在没有通过
protoc.exe
生成头文件的情况下,通过动态加载*.proto.
来进行结构对象的生成,并可以使用反射机制进行修改
为了测试所有常用类型,后续所有结构皆用下面定义
syntax = "proto3";
message SubEx {
uint64 sub_uint64 = 1;
int64 sub_int64 = 2;
uint32 sub_uint32 = 3;
int32 sub_int32 = 4;
double sub_double = 5;
float sub_float = 6;
string sub_string = 7;
bool sub_bool = 8;
map<int32,int32> sub_map = 9;
repeated uint64 sub_repeated_uint64 = 10;
repeated int64 sub_repeated_int64 = 11;
repeated uint32 sub_repeated_uint32 = 12;
repeated int32 sub_repeated_int32 = 13;
repeated double sub_repeated_double = 14;
repeated float sub_repeated_float = 15;
repeated string sub_repeated_string = 16;
repeated bool sub_repeated_bool = 17;
}
message Example {
uint64 ex_uint64 = 1;
int64 ex_int64 = 2;
uint32 ex_uint32 = 3;
int32 ex_int32 = 4;
double ex_double = 5;
float ex_float = 6;
string ex_string = 7;
bool ex_bool = 8;
map<int32,int32> ex_map = 9;
repeated uint64 ex_repeated_uint64 = 10;
repeated int64 ex_repeated_int64 = 11;
repeated uint32 ex_repeated_uint32 = 12;
repeated int32 ex_repeated_int32 = 13;
repeated double ex_repeated_double = 14;
repeated float ex_repeated_float = 15;
repeated string ex_repeated_string = 16;
repeated bool ex_repeated_bool = 17;
}