手机如何做车载mp3下载网站,网址域名查询,即时通讯app开发,福州建设网站效果图原文
protobuf会根据proto文件生成c对象及其序化/反序化方法,而iguana的struct_pb则是以结构为核心,编译期反射来生成序化/反序化代码.
有人提出能不能按proto文件输出结构呢,这样就可给其它语言用了,很好建议,实现起来也比较简单.
protobuf是从proto文件到c对象,而struct_p…原文
protobuf会根据proto文件生成c对象及其序化/反序化方法,而iguana的struct_pb则是以结构为核心,编译期反射来生成序化/反序化代码.
有人提出能不能按proto文件输出结构呢,这样就可给其它语言用了,很好建议,实现起来也比较简单.
protobuf是从proto文件到c对象,而struct_pb则是反之,通过C结构生成proto文件.
假设有此一个结构:
struct pair_t {int x;int y;
};
REFLECTION(pair_t, x, y);
enum Color { Red 0, Black 2, Green 4 };
struct vector_t {int id;Color color;std::variantint, pair_t, std::string variant;std::vectorint ids;std::vectorpair_t pairs;std::vectorstd::string strs;std::mapstd::string, pair_t map;std::string name;std::optionalint op_val;
};vector_t中有pair_t嵌套结构,枚举类型,vector类型,map类型及变量类型,这样一个结构,如何自动生成对应的pbproto文件呢? struct_pb提供了个很简单易用的接口:
std::string str;
iguana::to_protovector_t(str, pb); //#2
std::cout str;#2代码会把proto串输出到str中,pb参数是名字空间名,默认为空.最终输出的proto文本内容如下:
syntax proto3;
package pb;
option optimize_for SPEED;
option cc_enable_arenas true;
message vector_t {int32 id 1;Color color 2;oneof variant {int32 one_of_int32 3;pair_t one_of_pair_t 4;string one_of_string 5;}repeated int32 ids 6;repeated pair_t pairs 7;repeated string strs 8;mapstring, pair_t map 9;string name 10;int32 op_val 11;
}
message pair_t {int32 x 1;int32 y 2;
}
enum Color {Red 0;Black 2;Green 4;
}这样就避免了自己再根据结构翻译到proto格式的文件了,剩下的就是在文件中保存它,给其它语言使用了.