c++编程笔记 protobuf
protobuf,c++编程笔记,博智网带你了解详细信息 。
目录
- 字段内容的定义
- 修饰符
- 字段类型
- 引用方式
- 不同字段的方法
- 1)optional修饰的基本类型:
- 2)optional修饰的对象类型:
- 3)repeated修饰的基本类型:
- 4)repeated修饰的对象类型:
- 序列化
- 反序列化
- 总结
字段内容的定义//文件名:addressbook.protosyntax = "proto2";//proto版本//.proto文件新增一个可选的package声明符,用来防止不同的消息类型有命名冲突 。//包的声明符会根据使用语言的不同影响生成的代码 。对于C++,产生的类会被包装在C++的命名空间中 。package tutorial;package声明符message Person {required string name = 1;//姓名,= 1 二进制编码中使用的唯一 “标记”required int32 id = 2;//IDoptional string email = 3;//emailenum PhoneType {//枚举消息类型MOBILE = 0;//proto3版本中,首成员必须为0,成员不应有相同的值HOME = 1;WORK = 2;}//message PhoneNumber {required string number = 1;optional PhoneType type = 2 [default = HOME];}repeated PhoneNumber phones = 4;//phones为数组}message AddressBook {repeated Person people = 1;}
修饰符
- required 必须提供该字段的值,否则消息会被认为是”未初始化的“
- optional
- repeated 表示该属性为重复字段,可看走是动态数组,类似于c++中的vector
字段类型
- package
- message
- name
引用方式
- 类成员函数变量
- 标准meaasge方法
2.string DebugString() const;: 返回 message 的人类可读表达,对调试特别有用
3.void CopyFrom(const Person& from);用给定的 message 的值覆盖 message
4.void Clear();: 将所有元素清除回 empty 状态
不同字段的方法
1)optional修饰的基本类型:
- set_属性名(val) :初始化修改属性值;
- 属性名():获取属性值,只读模式,返回类型是::google::protobuf::int64;
2)optional修饰的对象类型:
- 属性名():返回只读的属性类型对象的引用,属性类型是指pb中定义的对象;
- mutable_属性名():返回可修改的属性类型对象的指针,属性类型是指pb中定义的对象;
- set_属性名():初始化设置字段值
3)repeated修饰的基本类型:
- add_属性名(val):向属性集合中添加元素;
- 属性名_size():获取集合大小;
- 属性名(i):返回集合中某一个元素,返回类型::google::protobuf::int64;
- 属性名():返回只读的整个集合的引用,返回的集合类型是const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&,可以使用iterator来迭代遍历,可用于修改;
- mutable_属性():返回可修改的整个集合的指针,返回的集合类型::google::protobuf::RepeatedField< ::google::protobuf::int64 >*,可以使用iterator来迭代遍历,可用于修改;
- set_属性名(int,x):设置repeated中元素的值
4)repeated修饰的对象类型:
- add_属性名():返回可修改的属性类型对象的指针(集合中的一个元素),属性类型是指pb中定义的对象;
- 属性名_size():获取集合大小;
- mutable_属性名(i):返回集合中某一个元素,返回的是可修改的属性类型对象的指针,属性类型是指pb中定义的对象;
- 属性名():返回只读的整个集合的引用,集合类型是const ::google::protobuf::RepeatedPtrField< pb定义的对象>& XXX const;,可以使用iterator来迭代遍历;
- mutable_属性名():返回可修改的整个集合的指针,集合类型是::google::protobuf::RepeatedPtrField< pb定义的对象>*,可以使用iterator来迭代遍历;
序列化
- required字段需要初始化,可以通过IsInitialized来检查是否完成message对象的初始化
推荐阅读
- 电脑如何调节亮度 笔记本亮度调节的方法
- 联想笔记本进u盘启动按什么键
- beex什么牌子
- DirectX是什么
- 笔记本散热器选购要注意什么
- 笔记本电脑鼠标没反应怎么办
- 最高直降1000元!小米笔记本开启双11大促 全年最低价
- 笔记本读取sd卡没反应 电脑sd卡读取没有反应-
- 神舟笔记本如何u盘重装系统 神舟笔记本怎么u盘重装系统-
- 笔记本usb接口没反应怎么回事
