Protocal buffer C++

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中使用枚举

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值