message Address
{
int32 num = 1;
bytes addr = 2;
}
message Person
{
int32 id = 1;
repeated bytes name = 2;
bytes sex = 3;
int32 age = 4;
Address addr = 5;
}
1.protobuf中嵌套复合数据类型的序列化
Person.pb.h
class Address
bytes addr
void clear_addr() ;
const std::string& addr() const; //得到addr里的值
void set_addr();
std::string* mutable_addr();//得到addr对应内存地址
Address addr = 5;
bool had_addr() const;//有没有
clear_addr();
const ::Address& addr() const;
::Address* mutable_addr();
Person p;
p.set_id(10);
p.set_age(32);
p.set_sex("man");
p.set_name("lufei")
p.addr()是一个const类型的引用,不可以设置值
p.mutable_addr()->set_addr("yongwangjiayuan");
p.mutable_addr()->set_num("202");
Person pp;
pp.addr().addr();
pp.addr().num();
2.如果某个消息体里的某个成员是个数组,应该怎么处理
给对应的成员添加关键字repeated
对应的是动态数组
int name_size() const;
clear_name();//清空动态数组里所有数据
const std::string& name(int index) const;
std::string* mutable_name(int index);//得到某个元素的地址
std::string* add_name();//申请资源
//带参数的add方法既能申请内存,还可以初始化
Person p;
p.add_name();
p.set_name(0,"lufei");
p.add_name("sabo");
p.add_name("aisi");
Person pp;
int size = pp.name_size();
for(int i = 0; i < size; i++)
{
std::cout<<pp.name(i)<<std::endl;
}
3.在protobuf中使用枚举